2016-02-03 6 views
1

Я пытаюсь сделать приложение, которое записывает журналы с winston.js в json формате с hekad. После того, как я установил winston.default.transports.console.json к true, вызовы, как w.info('test', {val: 123}) продукция:Возможно ли использовать значение уровня вместо имени в сообщениях журнала Winston?

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

Проблема заключается в том, что в соответствии с HEKA документов, тяжести должны быть числовыми, например, (для уровней syslog) 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