【问题标题】:Possible to have Winston to include which logger that created the entry?可以让 Winston 包含创建条目的记录器吗?
【发布时间】:2021-02-05 06:26:35
【问题描述】:

以下 PoC 输出

{"clock":"aaaa","id":"bbb","state":"ccc","level":"info","message":"Down","timestamp":"2021-02-04 15:25:25"}

但它不包括写入条目的记录器。 IE。在这种情况下,它是monitorLogger.info()info 部分在 level 标记中表示,但条目未提及 monitorLogger

问题

是否可以让winston 包含创建条目的记录器的标签?

check.js

const {monitorLogger} = require('./logger');

monitorLogger.info('Down', {
  clock: 'aaaa',
  id: 'bbb',
  state: 'ccc'
});

logger.js

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

const monitor = createLogger({
  transports: [
    new transports.Console()
  ],
  format: format.combine(
    format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    format.json(),
  ),
  exceptionHandlers: [
    new transports.Console()
  ]
});

module.exports = {
 monitorLogger: monitor
};

【问题讨论】:

    标签: javascript node.js ecmascript-6 winston


    【解决方案1】:
    const { createLogger, format, transports, config } = require('winston');
    const { combine, timestamp, label, json } = format;
    
    const monitor = createLogger({
      transports: [
        new transports.Console()
      ],
      format: combine(
        format.timestamp({
          format: 'YYYY-MM-DD HH:mm:ss'
        }),
        label({ label: 'monitor' }),
        timestamp(),
        json(),
      ),
      exceptionHandlers: [
        new transports.Console()
      ]
    });
    
    module.exports = {
     monitorLogger: monitor
    };
    

    给予

    {"clock":"aaaa","id":"bbb","state":"ccc","level":"info","message":"Down","timestamp":"2021-02-04 21:32:54","label":"monitor"}
    

    【讨论】:

      【解决方案2】:

      在createlogger下,我们可以添加如下标签

      const { createLogger, format, transports, config } = require('winston');
      
      const { combine, timestamp, label, json } = format; // <---- additional import
      
      const monitor = createLogger({
        transports: [
          new transports.Console()
        ],
        format: format.combine(
          format.timestamp({
            format: 'YYYY-MM-DD HH:mm:ss'
          }),
          format.json(),
          label({ label: 'monitor' })
        ),
        exceptionHandlers: [
          new transports.Console()
        ]
      });
      
      module.exports = {
       monitorLogger: monitor
      };
      
      Sample output would be
      
      {"clock":"aaaa","id":"bbb","state":"ccc","level":"info","message":"Down","label":"monitor","timestamp":"2021-02-04 15:25:25"}
      

      【讨论】:

      • 我收到 ReferenceError: label is not defined 并且您发布的 json 无效。
      • 嘿 Sandra,您可能需要从格式导入标签。 const { 结合,时间戳,标签} = 格式;
      • 我已经更新了您需要的额外导入 @SandraSchlichting。
      猜你喜欢
      • 2013-11-01
      • 1970-01-01
      • 2010-11-07
      • 2019-11-16
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      相关资源
      最近更新 更多