Winston: O formato de registro personalizado para arquivos não parece funcionar

Criado em 2 abr. 2015  ·  4Comentários  ·  Fonte: winstonjs/winston

Oi,

Usei sua função de formatador para fornecer um formato personalizado para minhas mensagens de log. Funciona perfeitamente para o transport.Console, mas o transport.File parece ignorar o formatador personalizado.

aqui está meu formatador de arquivo personalizado:

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) : '' );
}

é essencial o logger dado em seu exemplo. Eu aplico assim:

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

mas a saída no arquivo de registro permanece a mesma:
{"level":"info","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}
deveria ser:
{"level":"[INFO]","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}

Não sei o que há de errado porque o mesmo funciona com o transporte.Console.

por favor ajude

saudações

Tonacate

Comentários muito úteis

OK, não importa.
esqueci de definir
json: false

mas seria legal se você pudesse alterar apenas alguns campos no registro json :)

Todos 4 comentários

OK, não importa.
esqueci de definir
json: false

mas seria legal se você pudesse alterar apenas alguns campos no registro json :)

Demorei um pouco para descobrir onde definir "json: false". Defina-o no (s) transporte (s) de arquivo. Aqui está meu exemplo:

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)
        })
    ]
});

formatador funciona bem para mim, mas timestamp sempre imprime uma string literal

function () {
const d = nova data ();
return d.getHours () + : + d.getMinutes () + : +
d.getSeconds () + m + d.getMilliseconds ();
} | DEBUG | Mensagem para uma depuração
function () {
const d = nova data ();
return d.getHours () + : + d.getMinutes () + : +
d.getSeconds () + m + d.getMilliseconds ();
} | EMERGÊNCIA | Mensagem para uma depuração

OK, não importa.
esqueci de definir
json: false

mas seria legal se você pudesse alterar apenas alguns campos no registro json :)

Você salvou meu tempo! Eu me pergunto onde isso está documentado ..

Esta página foi útil?
0 / 5 - 0 avaliações