javascript - 如何更改 winston 日志格式?

在我的 Node 应用程序中,我使用 winston 模块来存储我的应用程序日志。我们可以以两种格式存储日志,一种是 json,另一种是字符串。在winston中将日志保存为字符串时,我的日志格式低于日志格式。

  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!!!');

最佳答案

我想知道同样的事情并找到了一个好的解决方案(虽然不是理想的 IMO,所以也许其他人可以权衡一下)。

您可以通过为传输对象提供格式化程序功能来完全自定义记录器输出。这对于文件传输可能比控制台更好,因为如果这是您想要的,您必须手动为字体着色。

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

// 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 被设置为错误变量。

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

https://stackoverflow.com/questions/18712680/

相关文章:

c# - 如何格式化 MVC3 中 TextBoxFor() 显示的 DateTime?

formatting - printf, sprintf 至少打印两位小数

c# - 用逗号代替小数将数字格式化为字符串

formatting - 取决于变量的输出格式字符串

c# - 如何更改datagridview中列的颜色?

c# - 在 Visual Studio 201x 中关闭 #region 的自动格式化

javascript - 在格式化数字输入时验证数字输入

r - 将带逗号的货币转换为数字

java - 删除 Eclipse 中的尾随空格——来自评论

php - 如何创建友好的日期格式(例如 "submitted 2 days ago")