【问题标题】:Winston Improper Log ConfigurationWinston 不正确的日志配置
【发布时间】:2015-08-05 11:58:35
【问题描述】:

我决定使用winston 登录我的node 项目。我正在 windows 平台上开发这个应用程序,但最终它会在 linux 平台上。

这是我用来配置记录器的代码。

/* Custom logging module
 * to write appropriate logs into log files as well as console.
 */

var winston = require( 'winston' );

winston.setLevels({
    info: 0,
    error: 1,
    warning: 2,
    audit: 3
});

winston.addColors({
    info: 'blue',
    error: 'red',
    warning: 'yellow',
    audit: 'green'
});

var logger = new ( winston.Logger )({
    levels: {
        info: 0,
        error: 1,
        warning: 2,
        audit: 3
    },

    transports : [
        new (winston.transports.Console)({
            level: 'info',
            prettyPrint: true,
            colorize: true,
            silent: false,
            timestamp: true
        }),

        new (winston.transports.File)({
            name : 'infoLogger',
            filename : './logs/info-log.log',
            prettyPrint: false,
            level: 'info',
            silent: false,
            colorize: true,
            timestamp: true,
            maxsize: 40000,
            maxFiles: 10,
            json: false,
            tailable : true
        }),

        new (winston.transports.File)({
            name : 'errorLogger',
            filename : './logs/error-log.log',
            prettyPrint : false,
            level : 'error',
            silent : false,
            colorize : true,
            timestamp : true,
            maxsize : 40000,
            maxFiles : 10,
            json : false,
            tailable : true
        }),

        new (winston.transports.File)({
            name : 'warningLogger',
            filename : './logs/warning-log.log',
            prettyPrint : false,
            level : 'warning',
            silent : false,
            colorize : true,
            timestamp : true,
            maxsize : 40000,
            maxFiles : 10,
            json : false,
            tailable : true
        }),

        new (winston.transports.File)({
            name : 'auditLog',
            filename : './logs/audit-log.log',
            prettyPrint : false,
            level : 'audit',
            silent : false,
            colorize : true,
            timestamp : true,
            maxsize : 40000,
            maxFiles : 10,
            json : false,
            tailable : true
        })
    ],

    colors: {
        info: 'blue',
        error: 'red',
        warning: 'yellow',
        audit: 'green'
    }
});

module.exports = logger;

我正在使用闲散代码登录文件。

logger.info( 'Winstom Log Info' );
logger.error( 'Winstom Log Error' );
logger.warning( 'Winstom Log Waring' );
logger.audit( 'Winstom Log Audit' );

但是,记录的消息中没有使用颜色。并且记录的文件并没有完全记录它们自己的级别。例如,

error-log.log 包含闲散消息。

2015-05-23T13:34:32.479Z - error: Winstom Log Error
2015-05-23T13:34:32.480Z - warning: Winstom Log Waring
2015-05-23T13:34:32.481Z - audit: Winstom Log Audit
2015-05-23T13:45:33.433Z - error: Winstom Log Error
2015-05-23T13:45:33.436Z - warning: Winstom Log Waring
2015-05-23T13:45:33.436Z - audit: Winstom Log Audit
2015-05-23T13:56:50.660Z - error: Winstom Log Error
2015-05-23T13:56:50.661Z - warning: Winstom Log Waring
2015-05-23T13:56:50.661Z - audit: Winstom Log Audit
2015-05-23T14:00:04.319Z - error: Winstom Log Error
2015-05-23T14:00:04.319Z - warning: Winstom Log Waring
2015-05-23T14:00:04.319Z - audit: Winstom Log Audit

错误日志也正在赶上警告日志和审计日志。 警告日志也是如此,它也在追赶审计日志的日志。

2015-05-23T13:34:32.480Z - warning: Winstom Log Waring
2015-05-23T13:34:32.481Z - audit: Winstom Log Audit
2015-05-23T13:45:33.436Z - warning: Winstom Log Waring
2015-05-23T13:45:33.436Z - audit: Winstom Log Audit
2015-05-23T13:56:50.661Z - warning: Winstom Log Waring
2015-05-23T13:56:50.661Z - audit: Winstom Log Audit
2015-05-23T14:00:04.319Z - warning: Winstom Log Waring
2015-05-23T14:00:04.319Z - audit: Winstom Log Audit

目前,只有审核日志和信息日志按预期工作。审计只包含审计日志和包含每一个的信息日志。

是什么导致了这个错误? 还请告诉我有关日志记录的任何最佳做法。

【问题讨论】:

    标签: node.js logging winston


    【解决方案1】:

    根据您在此处配置的日志级别:

    levels: {
        info: 0,
        error: 1,
        warning: 2,
        audit: 3
    },
    

    温斯顿的行为完全符合其应有的态度。也就是说,如果您将日志文件传输设置为侦听日志级别 error (1),它将捕获该级别及更高级别的所有日志。也许您打算像这样构建您的关卡?

    levels: {
        info: 0,
        warning: 1,
        error: 2,
        audit: 3
    },
    

    在这种结构中,您的错误日志文件将仅捕获 erroraudit 日志。

    至于你的颜色不起作用,你是否有机会使用cmd.exe?控制台颜色可能无法正常工作。朋友不要让朋友在windows上使用cmd.exe。 cmder 是一个更好的选择,尤其是对于 windows 上的 node.js 开发:

    http://gooseberrycreative.com/cmder/

    【讨论】:

    • 那么,如果我想让一个日志专门监听它自己的级别,那么,它们应该配置在同一级别吗?我的意思是信息在 0,在 1 休息?
    • 嗯,我尝试将rest设置为相同的级别,看起来他们会监听所有配置为1的日志,有没有办法指定它。
    • 听起来您希望传输只过滤特定日志级别的日志消息,并排除所有其他级别的日志。例如。显示warning 日志,但排除infoerroraudit 日志。这通常不是日志级别的工作方式,但您可以通过使用自己的自定义传输扩展现有传输之一来做到这一点:github.com/winstonjs/winston#adding-custom-transports
    猜你喜欢
    • 2021-07-16
    • 2023-03-16
    • 2015-02-14
    • 1970-01-01
    • 2013-07-19
    • 2019-05-20
    • 2019-07-22
    • 2012-08-01
    • 2015-04-21
    相关资源
    最近更新 更多