使用winston.js和node.js自定义消息格式

时间:2019-02-28 14:32:35

标签: javascript node.js winston

我正在我的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;

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

1 个答案:

答案 0 :(得分:1)

在Winston.js ver3上,传输接受格式

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

所以在您的情况下:

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

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