2016-02-03 22 views
1

我正在嘗試使用json格式的winston.js編寫日誌並與hekad一起工作的應用程序。之後予置winston.default.transports.console.jsontrue,調用等w.info('test', {val: 123})農產品:是否可以在winston日誌消息中使用級別值而不是名稱?

{"val":123,"level":"info","message":"test"}

的問題是,根據HEKA文檔,嚴重性必須爲數字,例如(用於系統日誌級別)6而不是info,5而不是notice等等。是否可以指示winston將級別值而不是名稱寫入日誌?

回答

1

最簡單的方法是更改​​日誌格式。這允許你創建幾乎相同的輸出,但是例如你可以將你的關卡名稱映射到數字。

您必須在傳輸中禁用json。在下面的示例中,我禁用了它,但我手動將其格式化爲json。

例如:

this.logger.add(winston.transports.File, { 
    name:'log.info', 
    level: 'info', 
    filename: path.join(logPath, 'info.log'), 
    json: false, // this is important 
    maxsize: 5242880, 
    maxFiles: 5, 
    colorize: false, 
    formatter: function(options) { //formatter function 
    var map = { //add rest of levels with values 
     info: 6, 
     notice: 5 
    } 
    //to check all options 
    console.log(options); //then you know what props you can use to create desired output 
    //because we turn off json we have to manually create it 
    return JSON.stringify({ 
     level: map[options.level],//I map level 
     message: options.message 
    }); 
    } 
}); 

這將在日誌文件中返回:

{ 「級」:6, 「消息」: 「一些信息」}

你可以閱讀更多關於它在winston文檔中(頁面底部「自定義日誌格式」部分)link

相關問題