Estoy usando winston-js
como registrador en mi proyecto; funciona bien, sin embargo, ahora estoy tratando de agregar una identificación de registro única a cada línea de registro para la depuración.
Tengo 2 transportes - 1) Consola, 2) Archivo.
Me gustaría que el ID de registro para la misma línea de registro sea el mismo para ambos transportes. Por el momento, a medida que la solicitud pasa por mi sistema, el ID de registro sigue siendo el mismo.
En el código de ejemplo a continuación, estoy usando el Meta predeterminado de defaultMeta
, que no parece funcionar, sin embargo, también intenté agregar funciones, y obtuve el mismo resultado.
¿Configuro el ID de registro para que la misma línea de registro sea la misma para ambos transportes?
Nota: estoy usando UUID para LogId en mi proyecto; para simplificar, he usado un solo número en los ejemplos.
Entonces, por ejemplo, mi configuración actual hace:
Expediente
logID: 1 | Request: Post | Request: 1 logID: 1 | Request: Post | Request: 1 logID: 2 | Request: Post | Request: 2
Consola
logID: 1 | Request: Post | Request: 1 logID: 1 | Request: Post | Request: 1 logID: 2 | Request: Post | Request: 2
Me gustaría:
Expediente
logID: 1 | Request: Post | Request: 1 logID: 2 | Request: Post | Request: 1 logID: 3 | Request: Post | Request: 2
Consola
logID: 1 | Request: Post | Request: 1 logID: 2 | Request: Post | Request: 1 logID: 3 | Request: Post | Request: 2
.
function devLogger () { const logFormat = printf(({ level, message, timestamp, stack, ...meta }) => { var logId = meta.logId return `${timestamp} [${level}] ${message} | ${logId} | Console`; }) const jsonFormat = printf(({ level, message, timestamp, stack, ...meta }) => { var logId = meta.logId return `${timestamp} [${level}] ${message} | ${logId} | File`; }) return createLogger({ defaultMeta: { logId: uuidv4() }, // Add logId to both transports transports: [ new transports.Console({ level: 'debug', format: combine( format.colorize(), timestamp({ format: 'DD-MM-YY HH:mm:ss' }), logFormat ), }), new transports.File({ level: 'debug', filename: 'error.log', format: combine(timestamp({ format: 'DD-MM-YY HH:mm:ss' }), errors({ stack: true }), jsonFormat), }), ] }); }
Se arregló con algunas variables directas.
Primero configuramos el LogId, luego lo reutilizamos, luego lo configuramos en una nueva ID lista para la próxima solicitud.
Esto funciona cuando ejecutamos logFormat
antes que jsonFormat
function devLogger () { var setLogId = uuidv4() const logFormat = printf(({ level, message, timestamp, stack}) => { return `${timestamp} [${level}] ${message} | ${setLogId} | Console`; }) const jsonFormat = printf(({ level, message, timestamp, stack}) => { var logId = setLogId setLogId = uuidv4() return `${timestamp} [${level}] ${message} | ${logId} | File`; }) return createLogger({ transports: [ new transports.Console({ level: 'debug', format: combine( format.colorize(), timestamp({ format: 'DD-MM-YY HH:mm:ss' }), logFormat ), }), new transports.File({ level: 'debug', filename: 'error.log', format: combine(timestamp({ format: 'DD-MM-YY HH:mm:ss' }), errors({ stack: true }), jsonFormat), }), ] }); }