Winston: El formato de registro personalizado para archivos no parece funcionar

Creado en 2 abr. 2015  ·  4Comentarios  ·  Fuente: winstonjs/winston

Hola,

Usé su función de formateador para proporcionar un formato personalizado a mis mensajes de registro. Funciona perfecto para el transporte. Consola pero el transporte. Costuras de archivo para ignorar el formateador personalizado.

aquí está mi formateador de archivos 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) : '' );
}

es esencial el registrador dado en su ejemplo. Lo aplico así:

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

pero la salida en el archivo de registro sigue siendo la misma:
{"level":"info","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}
debería ser:
{"level":"[INFO]","message":"INITIALISEING","timestamp":"2015-04-02T06:29:57.982Z"}

No sé qué pasa porque lo mismo funciona con la consola de transporte.

por favor ayuda

saludos

Tonacate

Comentario más útil

OK no importa.
se olvidó de configurar
json: false

pero sería genial si pudieras cambiar solo algunos campos en el registro json :)

Todos 4 comentarios

OK no importa.
se olvidó de configurar
json: false

pero sería genial si pudieras cambiar solo algunos campos en el registro json :)

Me tomó un poco averiguar dónde establecer "json: false". Configúrelo en los transportes de archivos. Aquí está mi ejemplo:

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

El formateador funciona bien para mí, pero la marca de tiempo siempre imprime una cadena literal

function () {
const d = nueva fecha ();
return d.getHours () + : + d.getMinutes () + : +
d.getSeconds () + m + d.getMilliseconds ();
} | DEBUG | Mensaje para una depuración
function () {
const d = nueva fecha ();
return d.getHours () + : + d.getMinutes () + : +
d.getSeconds () + m + d.getMilliseconds ();
} | EMERGENCIA | Mensaje para una depuración

OK no importa.
se olvidó de configurar
json: false

pero sería genial si pudieras cambiar solo algunos campos en el registro json :)

¡Me salvaste el tiempo! Me pregunto dónde está documentado esto.

¿Fue útil esta página
0 / 5 - 0 calificaciones