Winston: Пользовательский формат журнала для файлов не работает

Созданный на 2 апр. 2015  ·  4Комментарии  ·  Источник: winstonjs/winston

Привет,

Я использовал вашу функцию форматирования, чтобы предоставить собственный формат моим сообщениям журнала. Он идеально подходит для транспорта. Консоли, но транспорта. Файловых швов, чтобы игнорировать пользовательский форматер.

вот мой пользовательский форматировщик файлов:

function customFileFormatter (options) {
    // Return string will be passed to logger.
    return options.timestamp() +' ['+ options.level.toUpperCase() +'] '+ (undefined !== options.message ? options.message : '') +
     (options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : '' );
}

его существенный регистратор, приведенный в вашем примере. Применяю так:

winston.add(winston.transports.File, { 
    name: 'info-file',
    filename: logPath + '/info.log',
    level: 'info',
    maxsize: 15000000,
    formatter: customFileFormatter
});

но вывод в файле журнала остается прежним:
{"level":"info","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}
должен быть:
{"level":"[INFO]","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}

Не знаю, что не так, потому что то же самое работает с транспортом. Консоль.

пожалуйста помоги

Приветствую

Tonacate

Самый полезный комментарий

ОК, неважно.
забыл установить
json: false

но было бы здорово, если бы вы могли изменить только некоторые поля в json-логе :)

Все 4 Комментарий

ОК, неважно.
забыл установить
json: false

но было бы здорово, если бы вы могли изменить только некоторые поля в json-логе :)

Мне потребовалось немного времени, чтобы понять, где установить json: false. Установите его на файловом транспорте (ах). Вот мой пример:

const logFormatter = function(options) {
    // Return string will be passed to logger.

    return options.timestamp() +` `+ options.level.toUpperCase() +
        ` `+ (options.message ? options.message : ``) +
        (options.meta && Object.keys(options.meta).length ?
            `\n\t`+ JSON.stringify(options.meta) : `` );
};

const timestamp = function() {
    const d = new Date();
    return d.getHours() + `:` + d.getMinutes() + `:` +
        d.getSeconds() + `m` + d.getMilliseconds();
};

const logger = new (winston.Logger)({
    transports: [
        new (winston.transports.File)({
            timestamp: timestamp,
            formatter: logFormatter,
            level: `silly`,
            name: `fileAll`,
            filename: `fileAll.log`,
            json: false,                                 // set json:false on the file transport(s)
        })
    ]
});

форматтер отлично работает для меня, но метка времени всегда печатает буквальную строку

function () {
const d = новая дата ();
return d.getHours () + : + d.getMinutes () + : +
d.getSeconds () + m + d.getMilliseconds ();
} | DEBUG | Сообщение для отладки
function () {
const d = новая дата ();
return d.getHours () + : + d.getMinutes () + : +
d.getSeconds () + m + d.getMilliseconds ();
} | АВАРИЯ | Сообщение для отладки

ОК, неважно.
забыл установить
json: false

но было бы здорово, если бы вы могли изменить только некоторые поля в json-логе :)

Вы сэкономили мне время! Интересно, где это задокументировано ..

Была ли эта страница полезной?
0 / 5 - 0 рейтинги