【问题标题】:Customize messages format using winston.js and node.js使用 winston.js 和 node.js 自定义消息格式
【发布时间】:2019-03-02 16:42:56
【问题描述】:

我在我的 nodejs 项目中使用 winston.js,我正在寻找的是,将两个不同的自定义消息输出到不同类型的传输(控制台、文件)中。 控制台模式:

return `${timestamp} [${label}] ${level}: ${message}

文件模式(在文件中我只想显示消息和级别):

return ` ${level} : ${message}

这是我的代码:

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const myFormat = printf(({ level, message, label, timestamp }) => {

 return `${timestamp} [${label}] ${level}: ${message}`;
  }
 });

const logger = createLogger({
 format: combine(
  label({ label: 'hello  |' }),
  timestamp(),
  myFormat
),
transports: [new transports.Console(),
  new transports.File({
   filename: api.log,
   level: 'info'
  })
]
 });
 logger.stream = {
   write: function(message, encoding) {

   logger.info(message);
 },
  };
 module.exports = logger;

使用此代码我有相同的输出,请帮忙?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我尝试了上面的代码,但在控制台和输出文件中得到了相同的消息
  • 好吧,这很明显,但是您是否尝试过了解 winstone.js 记录器的工作原理?或者您只需要有人提供直接代码以便您可以复制粘贴?!
  • 问题是,要显示两个不同的日志,一个到控制台,另一个在文件中,我检查了文档我没有发现任何感兴趣的东西

标签: javascript node.js winston


【解决方案1】:

来自 Transport 接受格式的 Winston.js ver3

为了对不同的输出有不同的日志格式,您需要创建不同的 Format 对象并将它们传递给您的 Transport 构造函数。

所以在你的情况下:

  • 您已经为 ${timestamp} [${label}] ${level}: ${message} 创建了 myFormat,而不是将其传递给 createLogger,您需要将其传递给 Console 构造函数。
  • 您需要为${level} : ${message} 创建另一个Format
  • Format 传递给File 传输构造函数的format 属性

您可以在 winston.js 项目源代码中看到将不同格式传递给控制台的示例: https://github.com/winstonjs/winston/blob/master/examples/quick-start.js

【讨论】:

  • 感谢米兰的回答,但是控制台和文件构造函数是什么意思,你能举个例子吗?
  • 像这样 :new transports.Console(myFormat), ?
  • 非常感谢米兰的帮助 :) 现在开始工作了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多