【问题标题】:String interpolation with winston not working in Nodejs带有winston的字符串插值在Nodejs中不起作用
【发布时间】:2019-10-26 22:20:45
【问题描述】:

当我尝试使用 winston 记录器进行记录时,我无法在 nodejs 中正确查看 ID 和错误。

这里是 logger.js 文件:

const path = require('path');
const winston = require('winston');

module.exports = function (app) {
  global.logger = new Logger(app.config.get('app').logLevel);
};

function Logger(logLevel='info') {
  return winston.createLogger({
    levels: {alert: 0, error: 1, warn: 2, info: 3, verbose: 4, debug: 5, silly: 6},
    level: logLevel,
    transports: [
      new (winston.transports.Console)({level: logLevel}),
      new (require('winston-daily-rotate-file'))({filename: path.resolve(__dirname + '/../../logs/app.log')})
    ]
  });
}

在 Customer.js 中,我尝试这样记录:

logger.warn('Failed to update patient during user(%s) creation', userInstance.id, err);

这是我得到的输出:

 {"_bsontype":"ObjectID","id":{"type":"Buffer","data":[93,0,225,203,227,175,68,1,61,50,162,194]},"level":"warn","message":"Failed to update patient during user(%s) creation"}

如果我错了,请纠正我。

【问题讨论】:

    标签: javascript node.js logging winston


    【解决方案1】:

    来自winston's doc

    log 方法使用 util.format 提供字符串插值。必须使用 format.splat() 启用它。

    您似乎需要在记录器初始化期间指定它。来自同一链接:

    const logger = createLogger({
      format: format.combine(
        format.splat(),
        format.simple()
      ),
      transports: [new transports.Console()]
    });
    

    【讨论】:

    • 你能告诉我如何在我的代码中添加相同的内容吗?
    猜你喜欢
    • 2017-11-27
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多