如何在 Node.JS 中使用 Winston 格式化错误日志?

How do I format error logs with Winston in Node.JS?

我有一个 Node.js 应用程序,它使用 Winston for logging. I am printing my logs using printf 像这样:

winston.createLogger({
  level: 'debug',
  format: winston.format.combine(            
    winston.format.timestamp({ format: 'HH:mm:ss.SSSSS'}),
    winston.format.printf(log => `[${log.level}] [${log.timestamp}] ${log.message} `)
  ),
  transports: []
});

除了“错误”日志的情况外,这工作正常。当日志的日志级别为 'error' 时,日志会写入一个格式如下的条目:[${log.level}] [${log.timestamp}] ${log.message}${error.message}。请注意,日志消息和错误消息之间没有 space。

如果日志级别为错误,如何在日志消息和错误消息之间放置 space?

documentation 起,winton 仅支持用于 info 日志记录的 format 参数。

虽然这是事实,但默认情况下 winston 仅支持级别 info 的格式设置。但是,您可以编写自己的 format 函数。请参阅下面的示例。


const { combine, timestamp, label, printf } = winston.format;

const myFormat = printf(info => {
    // This will customize the Error Message
    if(info instanceof Error) {
        return `${info.timestamp} [${info.label}] ${info.level}: ${info.message} ${info.stack}`;
    }
    return `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`;
});

winston.createLogger({
    level: "info",
    format: combine(
        winston.format.splat(),
        label({ label: filename}),
        timestamp(),
        myFormat,
    ),
    transports: [
      new winston.transports.File({ filename: path.join(os.tmpdir(), "test", "test.log"), level: "info" }),
    ],
});