【问题标题】:Is it possible to use level value instead of name in winston log messages?是否可以在 winston 日志消息中使用级别值而不是名称?
【发布时间】:2016-02-06 07:31:41
【问题描述】:

我正在尝试使用hekad 制作一个使用winston.js 以json 格式写入日志的应用程序。在我将winston.default.transports.console.json 设置为true 之后,像w.info('test', {val: 123}) 这样的调用会产生:

{"val":123,"level":"info","message":"test"}

问题是根据 heka 文档,严重性必须是数字,例如(对于 syslog 级别)6 而不是 info,5 而不是 notice 等。是否可以指示 winston 将级别值而不是名称写入日志?

【问题讨论】:

    标签: node.js logging winston hekad


    【解决方案1】:

    最简单的方法是更改​​日志格式。这允许您创建几乎相同的输出,但例如您可以将级别名称映射到数字。

    您必须在传输中禁用 json。在下面的示例中,我禁用了它,但我手动将其格式化为 json。

    示例:

    this.logger.add(winston.transports.File, {
      name:'log.info',
      level: 'info',
      filename: path.join(logPath, 'info.log'),
      json: false, // this is important
      maxsize: 5242880,
      maxFiles: 5,
      colorize: false,
      formatter: function(options) { //formatter function
        var map = { //add rest of levels with values
          info: 6,
          notice: 5
        }
        //to check all options
        console.log(options); //then you know what props you can use to create desired output
        //because we turn off json we have to manually create it
        return JSON.stringify({ 
          level: map[options.level],//I map level
          message: options.message
        });
      }
    });
    

    这将在日志文件中返回:

    {"level":6,"message":"some message"}

    您可以在 winston 文档中阅读更多相关信息(在页面底部的“自定义日志格式”部分)link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 2018-04-11
      相关资源
      最近更新 更多