58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
class Logger {
|
|
context = {};
|
|
setContext(ctx) {
|
|
this.context = { ...this.context, ...ctx };
|
|
}
|
|
log(level, message, data) {
|
|
// Skip all logs if QUIET mode is enabled (unless it's an error)
|
|
if (process.env.QUIET === 'true' && level !== 'error') {
|
|
return;
|
|
}
|
|
const timestamp = new Date().toISOString();
|
|
const logEntry = {
|
|
timestamp,
|
|
level,
|
|
message,
|
|
...this.context,
|
|
...data
|
|
};
|
|
// Structured JSON logging for production
|
|
if (process.env.NODE_ENV === 'production') {
|
|
console.log(JSON.stringify(logEntry));
|
|
}
|
|
else {
|
|
// Human-readable for development
|
|
const prefix = `[${timestamp}] ${level.toUpperCase()}`;
|
|
const contextStr = Object.keys({ ...this.context, ...data }).length > 0
|
|
? ` ${JSON.stringify({ ...this.context, ...data })}`
|
|
: '';
|
|
console.log(`${prefix}: ${message}${contextStr}`);
|
|
}
|
|
}
|
|
debug(message, data) {
|
|
// Skip debug logs unless DEBUG or VERBOSE environment variable is set
|
|
if (!process.env.DEBUG && !process.env.VERBOSE) {
|
|
return;
|
|
}
|
|
this.log('debug', message, data);
|
|
}
|
|
info(message, data) {
|
|
// Skip info logs unless VERBOSE is set
|
|
if (!process.env.DEBUG && !process.env.VERBOSE) {
|
|
return;
|
|
}
|
|
this.log('info', message, data);
|
|
}
|
|
warn(message, data) {
|
|
// Skip warnings unless VERBOSE is set
|
|
if (!process.env.DEBUG && !process.env.VERBOSE) {
|
|
return;
|
|
}
|
|
this.log('warn', message, data);
|
|
}
|
|
error(message, data) {
|
|
this.log('error', message, data);
|
|
}
|
|
}
|
|
export const logger = new Logger();
|
|
//# sourceMappingURL=logger.js.map
|