首页 > 解决方案 > 为什么 Winston 不将错误记录到文件中?

问题描述

我是 Winston 的新手,当代码出现错误时,它会记录到控制台而不是日志文件。信息正确记录到另一个文件,但错误不会。

这是我的 logger.js 文件:

const winston = require('winston')

let logger

module.exports.init = () => {
  logger = winston.createLogger({
    level: 'info',
    format:  winston.format.simple(),
    transports: [
      new winston.transports.Console(),
      new winston.transports.File({ filename: './logs/error.log', level: 'error' }),
      new winston.transports.File({ filename: './logs/info.log' })
    ]
  })

  process.on('uncaughtException', ex => {
    logger.error(ex.message)
    process.exit(1)
  })

  process.on('unhandledRejection', ex => {
    logger.error(ex.message)
    process.exit(1)
  })
}

module.exports.use = () => logger

我在这里使用了代码,但它不起作用。任何帮助将非常感激。

标签: node.jsexpresswinston

解决方案


我怀疑您的进程在有机会写入日志之前已经退出。我建议等到所有消息都记录下来后再退出,请参阅等待日志写入winston

process.on('uncaughtException', ex => {
  logger.error(ex.message)
  logger.on('finish', () => {
      process.exit(1);
  });
})

process.on('unhandledRejection', reason => {
  logger.error("unhandledRejection: " + reason)
  logger.on('finish', () => {
      process.exit(1);
  });
})

推荐阅读