javascript - winston 的字符串插值在 Nodejs 中不起作用

标签 javascript node.js logging winston

当我尝试使用 winston logger 进行记录时,我无法在 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"}

如有错误请指正

最佳答案

来自 winston's doc :

The log method provides the string interpolation using util.format. It must be enabled using format.splat().

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

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

关于javascript - winston 的字符串插值在 Nodejs 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561576/

相关文章:

javascript - 在同一个类中调用 EventEmitter 两次?

javascript - 动态编辑html声明javascript

javascript - 存储来自 Google JavaScript API 请求的响应

logging - 如何在nginx中记录所有 header ?

python - 如何在Python Django的设置中启用每日新的日志文件名?

javascript - 阻止 javascript 警告框

node.js - 用于 vue-cli 的 Webpack 开发服务器 : Error spawn EACCES

javascript - 如何在 Express.js 中正确使用 Node-mysql?

java - 避免由于 Log4j 中的默认行为而多次记录同一消息

node.js - 密码保护 AWS Node EB 应用程序