gemini-cost-tracker
Version:
CLI tool to display token usage and costs for Gemini and Vertex AI
97 lines • 3.27 kB
JavaScript
export var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
LogLevel[LogLevel["WARN"] = 1] = "WARN";
LogLevel[LogLevel["INFO"] = 2] = "INFO";
LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
})(LogLevel || (LogLevel = {}));
class Logger {
level = LogLevel.WARN; // デフォルトを WARN に変更
format = 'text';
setLevel(level) {
this.level = level;
}
setFormat(format) {
this.format = format;
}
formatMessage(entry) {
if (this.format === 'json') {
return JSON.stringify({
level: LogLevel[entry.level],
message: entry.message,
timestamp: entry.timestamp.toISOString(),
context: entry.context,
error: entry.error
? {
name: entry.error.name,
message: entry.error.message,
stack: entry.error.stack,
}
: undefined,
});
}
const timestamp = entry.timestamp.toISOString();
const levelName = LogLevel[entry.level];
let formatted = `[${timestamp}] [${levelName}] ${entry.message}`;
if (entry.context && Object.keys(entry.context).length > 0) {
formatted += ` - Context: ${JSON.stringify(entry.context)}`;
}
if (entry.error) {
formatted += ` - Error: ${entry.error.message}`;
}
return formatted;
}
log(level, message, context, error) {
if (this.level >= level) {
const entry = {
level,
message,
timestamp: new Date(),
context,
error,
};
const formatted = this.formatMessage(entry);
switch (level) {
case LogLevel.ERROR:
console.error(formatted);
break;
case LogLevel.WARN:
console.warn(formatted);
break;
case LogLevel.INFO:
case LogLevel.DEBUG:
default:
console.log(formatted);
break;
}
}
}
error(message, context, error) {
this.log(LogLevel.ERROR, message, context, error);
}
warn(message, context) {
this.log(LogLevel.WARN, message, context);
}
info(message, context) {
this.log(LogLevel.INFO, message, context);
}
debug(message, context) {
this.log(LogLevel.DEBUG, message, context);
}
// Convenience method for logging app errors
appError(message, code, error, context) {
this.error(message, { ...context, errorCode: code }, error);
}
}
export const logger = new Logger();
// Set log level from environment variable
const envLogLevel = process.env.LOG_LEVEL?.toUpperCase();
if (envLogLevel && envLogLevel in LogLevel) {
logger.setLevel(LogLevel[envLogLevel]);
}
// Set log format from environment variable
const envLogFormat = process.env.LOG_FORMAT?.toLowerCase();
if (envLogFormat === 'json' || envLogFormat === 'text') {
logger.setFormat(envLogFormat);
}
//# sourceMappingURL=logger.js.map