node console.log 同时输出到文件(基于 winston 方案)

46 阅读1分钟

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 级别的日志
};