我怎样才能改变Winston的日志格式?

在我的节点应用程序中,我使用winston模块来存储我的应用程序日志。 我们可以将日志以两种格式存储,一种是json,另一种是string。 在winston中将string保存为string时,我正在获取日志格式。

2013-09-10T06:51:34.199Z - error: error message!!! (timestamp) - (level) : (log message) 

现在我想将上面的日志格式更改为以下内容:

  2013-09-10T06:51:34.199Z/error/error message!!! (timestamp) / (level) / (log message) 

这怎么能实现?

我的代码

  var winston = require('winston'); winston.loggers.add('category1', { file: { filename: '/path/to/some/file',json:false } }); var category1 = winston.loggers.get('category1'); category1.log('error','error message!!!'); 

我想知道同样的事情,并find一个好的解决scheme(虽然不是理想的海事组织,所以也许别人可以权衡这一点)。

通过为传输对象提供格式化function,可以完全自定义logging器输出。 这可能比控制台更好的文件传输,因为你将不得不手动着色你的字体,如果这是你想要的。

这是一个相对简单的格式化函数,您可以使用(并根据您的需要进行调整):

 // Define options for Date#toLocaleTimeString call we will use. var twoDigit = '2-digit'; var options = { day: twoDigit, month: twoDigit, year: twoDigit, hour: twoDigit, minute: twoDigit, second: twoDigit }; function formatter(args) { var dateTimeComponents = new Date().toLocaleTimeString('en-us', options).split(','); var logMessage = dateTimeComponents[0] + dateTimeComponents[1] + ' - ' + args.level + ': ' + args.message; return logMessage; } 

要在你的传输中使用这个格式化器,只需调整你的代码来传递函数:

 winston.loggers.add('category1', { file: { filename: '/path/to/some/file', json: false, formatter: formatter } }); 

值得一提的是,属性args.meta将被设置为任何传递给日志方法调用的对象参数。 所以你必须想出一个处理传入的对象的策略(或者简单地把整个对象打印成JSON)。 例如:

 var error = { name: 'MongoError', code: 11000, err: 'insertDocument :: caused by :: 11000 E11000 duplicate key error...' } logger.info('Some error ocurred: ', error); 

会导致args.meta被设置为错误variables。

正如你所看到的,这样处理日志消息时有相当多的处理。 如果有更好的方法来做这些事情,我不会感到惊讶,但希望这可以帮助你(或其他人)。