簡體   English   中英

如何更改winston日志格式?

[英]How can I change the winston log format?

在我的節點應用程序中,我使用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被設置為錯誤變量。

正如您所看到的,以這種方式處理日志消息時需要處理相當多的事情。 如果有更好的方法來做這些事情,我不會感到驚訝,但希望這可以幫助你(或其他人)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM