【发布时间】:2019-01-08 21:12:57
【问题描述】:
我正在使用winston 进行日志记录,并且大多数情况下它运行良好,但是当出现异常时,它只是不打印任何详细信息。
这是我配置winston的代码:
// Create logger
const logger = winston.createLogger()
// Create timestamp format
const tsFormat = () => (new Date()).toLocaleTimeString()
// Attach transports based on app mode
if (process.env.APP_MODE === 'production') {
// Log to file
logger.add(new (winston.transports.DailyRotateFile)({
filename: path.join(__dirname, '../logs/errors-%DATE%.log'),
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
format: winston.format.json(),
handleExceptions: true
}))
} else {
// Log to the console
logger.add(new (winston.transports.Console)({
timestamp: tsFormat,
colorize: true,
handleExceptions: true
}))
}
module.exports = logger
我也在使用Express,在我的错误处理中间件中,我有这个代码:
const logger = require('../config/winston')
function (err, req, res, next) {
console.log(err)
logger.error(err)
res.status(500).send({ error: 'Please try again later.' })
}
问题是当出现错误时所有winston的日志都是:
{"级别":"错误"}
虽然旧的 console.log() 显示:
TypeError: Cannot read property 'filename' of undefined
at router.post (/Users/balazsvincze/Desktop/testapi/app/routes/upload.js:16:33)
at Layer.handle [as handle_request] (/Users/de/Desktop/testapi/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/balazsvincze/Desktop/testapi/node_modules/express/lib/router/route.js:137:13)
at Immediate.<anonymous> (/Users/balazsvincze/Desktop/testapi/node_modules/multer/lib/make-middleware.js:53:37)
at runCallback (timers.js:814:20)
at tryOnImmediate (timers.js:768:5)
at processImmediate [as _immediateCallback] (timers.js:745:5)
如何让winston 记录类似的内容,包括堆栈跟踪?
非常感谢!
编辑:如果我将 logger.error(err) 行更改为 logger.error(err.message),至少我得到这个:
{"message":"无法读取属性‘文件名’的 未定义","级别":"错误"}
离我所追求的还很远。
【问题讨论】:
-
我不敢相信这个问题不是更受欢迎。这是设置 SERN 应用程序时我需要做的第一件事
标签: node.js express logging winston