node console.log 同时输出到文件(基于 winston 方案)
环境准备
pnpm add winston winston-daily-rotate-file --save-dev
代码如下:
import 'winston-daily-rotate-file';
const logFormat = winston.format.printf(({ timestamp, level, message }) => {
return `[${timestamp}] ${level}: ${message}`;
});
const fileTransport = new winston.transports.DailyRotateFile({
filename: 'log/%DATE%.log', // 按日期命名
datePattern: 'YYYY-MM-DD-HH', // 每天一个文件
zippedArchive: false, // 压缩旧文件
maxSize: '20m', // 最大文件大小 20MB
maxFiles: '14d' // 保留14天的日志文件
});
const consoleTransport = new winston.transports.Console({
format: winston.format.combine(winston.format.colorize(), winston.format.timestamp(), logFormat)
const logger = winston.createLogger({
exitOnError: false,
format: winston.format.combine(winston.format.timestamp(), logFormat),
transports: [fileTransport, consoleTransport]
});
console.log = (...args) => {
logger.info(args.join(' ')); // 输出 info 级别的日志
};
console.warn = (...args) => {
logger.warn(args.join(' ')); // 输出 warn 级别的日志
};
console.error = (...args) => {
logger.error(args.join(' ')); // 输出 error 级别的日志
};