将winston设置为在express上记录url路径

问题描述

我是第一次设置Winston记录器

const { createLogger,format,transports } = require('winston');

const logLevels = { error: 0,warn: 1,info: 2,verbose: 3,debug: 4,silly: 5 };

const logger = createLogger({

    level: logLevels[process.env.LOG_LEVEL] !== undefined ? process.env.LOG_LEVEL : 'info',format: format.combine(
        format.colorize(),format.timestamp({
            format: 'YYYY-MM-DD HH:mm:ss'
        }),format.simple(),format.printf(context => {
            const msgstr = JSON.stringify(context.message,null,null)
            console.log(context);
            return `[${context.level}] [${context.timestamp}] ${msgstr}`;
        }),),transports: [new transports.Console()]
});

export default logger

不确定这样做是否正确,但是当我记录错误时,我看不到上下文对象内的路径。

我在应用程序结尾处捕获了错误

app.use((err,req,res,next) => {
    logger.error(err)
    if (res.headeRSSent) {
        return next(err)
    }
    res.status(500).send({ error: err })
});

任何帮助都会很棒,谢谢!

解决方法

您应该在对错误记录器的调用中添加堆栈跟踪:

{{1}}

我在下面的堆栈跟踪的前6行中添加了具体的错误类。当我使用%s语法时,您需要splat设置,因此也许使用类似以下记录器:

{{1}}