在 Winston 中如何将错误对象记录到文件而不是控制台?

How do you log an error object to file rather than console in Winston?

在 Winston 中是否有一种简单的方法可以将完整的错误对象记录到 JSON 日志文件中,但将易于阅读的消息打印到控制台 (err.message)/ 'Error Error!' 在这种情况下?

logger.log({
    level: 'error',
    message: 'Error Error!',
    error: err
})

目前,当我 运行 此代码时,我收到消息 加上 完整的错误对象打印到控制台。实际上,我只想将消息打印到控制台,然后在我的日志文件中提供完整的对象。

我也试过:

logger.error('Error Error', { error: err })

配置

import winston from 'winston'
export const logger = winston.createLogger({
    level: 'info',
    format: winston.format.json(),
    transports: [
        new winston.transports.File({ filename: './logs/error.log', level: 'error' }),
        new winston.transports.File({ filename: './logs/combined.log' })
    ]
})

if (process.env.NODE_ENV !== 'production') {
    logger.add(
        new winston.transports.Console({
            format: winston.format.combine(winston.format.colorize(), winston.format.simple())
        })
    )
}

您目前正在使用 winston.format.simple(),returns 以 ${info.level}: ${info.message} JSON.stringify({ ...rest }) 的格式记录(参见此处 https://www.npmjs.com/package/winston#usage

您需要创建自己的格式来生成您想要的输出:

if (process.env.NODE_ENV !== 'production') {

    const myFormat = winston.format.printf(({ level, message, label, timestamp }) => {
      return `${timestamp} [${label}] ${level}: ${message}`; // modify as needed
    });

    logger.add(
        new winston.transports.Console({
          format: winston.format.combine(
            winston.format.colorize(),
            myFormat
          )
        })
    );
}