2015-08-21 2 views
4

Когда я создаю logger winston для узла nodejs и устанавливаю json:true, он всегда выводит журналы JSON в многострочном формате. Если я подключу их к файлу и попробую grep этот файл, мои grep-хиты включают только часть строки журнала. Я хочу Winston для вывода моего лога строки в формате JSON, но не очень печатей JSONКак изменить вывод узла WinSon JSON на одну строку

Вот мой конфиг (CoffeeScript, извинения):

winston = require 'winston' 
logger = new (winston.Logger)(
    transports: [ 
    new winston.transports.Console({ 
    json: true 
    }) 
    ] 
) 

и некоторый пример вывод:

{ 
    "name": "User4", 
    "level": "info", 
    "message": "multi line whyyyyy" 
} 

ответ

6

кажется, что принятый ответ устарел. Вот как сделать это для текущей версии Winston (2.3.1):

var winston = require('winston'); 
var logger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)({ 
    json: true, 
    stringify: (obj) => JSON.stringify(obj), 
    }) 
    ] 
}) 

Обратите внимание на круглые скобки вокруг winston.transports.Console.

+0

Я принял это принятый ответ, но не имел возможности проверить. Если кто-либо обнаружит, что это не работает с указанными версиями, пожалуйста, дайте мне знать – zayquan

3

Транспорты winston предоставляют способ переопределить метод stringify, поэтому, изменив конфигурацию выше, я получил однострочный вывод JSON.

Новая конфигурация:

winston = require('winston') 
logger = new (winston.Logger)({ 
    transports: [ 
    new winston.transports.Console({ 
    json: true, 
    stringify: (obj) => JSON.stringify(obj) 
    }) 
    ] 
}) 
Смежные вопросы