温斯顿DailyRotateFile不记录错误

问题描述

我正在尝试使用Winston的DailyRotateFile进行日志记录-所有日志都应放在按时间表循环的单个文件中。我的目标是一次性设置此记录器,然后在记录信息时根据需要调用它。我的问题是由于某种原因,错误未正确记录。每次发生错误时,我都会得到如下一行:2020-11-07T16:50:47.372Z error: undefined,除此之外,什么都没有-没有堆栈跟踪或其他任何东西。我通过winston.error(err)记录了错误。我以前发现过一些同样的问题,但是所提供的解决方案似乎根本没有帮助我(例如,此github线程在https://github.com/winstonjs/winston/issues/1338#issuecomment-697958085),所以我在这里提问。为了更加清楚起见,我提供了logger.js文件以提供帮助:

const winston = require('winston')
require('winston-daily-rotate-file')
const { format } = require('winston')
const path = require('path')
require('dotenv').config()

const logPath = path.join(__dirname,'/logs')
const tsFormat = () => (new Date().toISOString())

// remove default options
winston.remove(winston.transports.Console)
winston.remove(winston.transports.File)

// Used to print error stacktraces
const print = format.printf((info) => {
  let { timestamp,level,code,stack,message } = info;
  // print out http error code w/ a space if we have one
  code = code ? ` ${code}` : '';
  // print the stack if we have it,message otherwise.
  message = stack || message;

  const log = `${timestamp} ${level}${code}: ${message}`

  return info.stack ? `${log}\n${info.stack}` : log
})

const rotateLogTransport = new winston.transports.DailyRotateFile({ // eslint-disable-line
  filename: process.env.NODE_ENV === 'production' ? 'App-%DATE%.log' : 'AppDev-%DATE%.log',dirname: logPath,level: 'info',colorize: true,format: format.combine(
    format.colorize(),format.timestamp(),format.align(),format.errors({ stack: true }),print
  ),timestamp: tsFormat,json: false,zippedArchive: true,maxSize: '20m'

})

const devTransportConsole = new winston.transports.Console({
  level: 'info',print
  )
})

winston.add(devTransportConsole)
winston.add(rotateLogTransport)

我在我的主要app.js代码中需要此文件,如下所示,然后我只需在其他文件中引用winston.infowinston.error来记录内容

...
const winston = require('winston')
const logger = require('./logger') // eslint-disable-line
...
client
  .on('error',console.error)
  .on('warn',console.warn)
  .on('ready',async () => {
    winston.info(`Client ready; logged in as ${client.user.tag}! (${client.user.id})`)
  })
...

我不确定从这里到底要走什么路,或者不确定是否有更简单的方法来完成所有这些工作,但是令人沮丧的是无法看到正在发生的错误以及代码中的错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)