Open pquerner opened 1 month ago
My error level on winston is error. I have transport for console, and 2 dailyRotation logs. 1 for debug. 1 for error.
error
The debug log is still written, ignoring the minimum level.
import winston from "winston"; import DailyRotateFile from 'winston-daily-rotate-file'; import fs from "fs"; export class Logger { private static logger: winston.Logger; public static getLogger() { try { if (typeof this.logger !== "undefined") { return this.logger; } const logger = Logger.buildLogger(); this.logger = logger; return this.logger; } catch (error) { console.error(error); } return false; } public static log(level: string, msg: any) { if (this.getLogger() instanceof winston.Logger) { this.logger.log(level, msg); return; } console.log(msg); } private static getDirName() { const curDate = new Date(); const curMonth = ("0" + (curDate.getMonth() + 1)).slice(-2); const curYYYYMM = curDate.getFullYear() + "-" + curMonth; return curYYYYMM; } private static getLogDir() { return `/var/log/myapp/123/`; } private static getRotationLogger(level: string) { const logsDirectory = Logger.getLogDir(); const colorizer = Logger.getLoggerColorizer(); let rotatingLog: DailyRotateFile = new DailyRotateFile({ dirname: logsDirectory + Logger.getDirName(), filename: `%DATE%_${level}.log`, datePattern: 'YYYY-MM-DD', level: level, zippedArchive: true, maxSize: '20m', maxFiles: '14d', createSymlink: true, symlinkName: `current_${level}.log`, json: false, format: Logger.getLoggerFormat(colorizer) }); rotatingLog.on('rotate', function () { if (!fs.existsSync(logsDirectory + Logger.getDirName() + '/')) { rotatingLog = new winston.transports.DailyRotateFile({ dirname: logsDirectory + Logger.getDirName(), filename: `%DATE%_${level}.log`, datePattern: 'YYYY-MM-DD', level: level, }); } }); return rotatingLog; } private static buildLogger() { const colorizer = this.getLoggerColorizer(); const logLevel = process.env.LOG_LEVEL || 'debug'; const logger = winston.createLogger({ level: logLevel, format: this.getLoggerFormat(colorizer), transports: [ new (winston.transports.Console)(), Logger.getRotationLogger('error'), Logger.getRotationLogger('debug'), ], }); return logger; } private static getLoggerColorizer() { const colorsConfig = { error: 'red', warn: 'yellow', info: 'green', debug: 'cyan' }; const colorizer = winston.format.colorize({all: true, colors: colorsConfig}); return colorizer; } private static getLoggerFormat(colorizer: winston.Logform.Colorizer) { return winston.format.combine( winston.format.timestamp(), winston.format.printf((meta: any) => { const {level, message, timestamp, namespace, stack, ...restMeta} = meta; let _message = message; if (meta.isSequelize) { _message = 'Sequelize logging message:'; delete restMeta.isSequelize; } const _level = level || 'debug' const coloredLevel = colorizer.colorize(_level, `[${_level.toUpperCase()}]`); const displayNamespace = namespace ? `[${namespace}] -` : ''; const stackMessage = stack ? `\n${stack}` : ''; const otherMetaMessage = Object.keys(restMeta).length > 0 ? `\n${JSON.stringify(restMeta)}` : ''; return `${timestamp} ${displayNamespace} ${coloredLevel}: ${_message} ${otherMetaMessage}${stackMessage}`; }) ); } }
Call:
Logger.log('debug', 'foobar');. I do not see the debug log in the console, but the file is written to %DATE%_debug.log (and symlinked to current_debug.log).
Logger.log('debug', 'foobar');
%DATE%_debug.log
current_debug.log
I expected the file not to be written at all, because my level doesnt match.
My error level on winston is
error
. I have transport for console, and 2 dailyRotation logs. 1 for debug. 1 for error.The debug log is still written, ignoring the minimum level.
Call:
Logger.log('debug', 'foobar');
. I do not see the debug log in the console, but the file is written to%DATE%_debug.log
(and symlinked tocurrent_debug.log
).I expected the file not to be written at all, because my level doesnt match.