Winston: Winston no registra / analiza un error detectado de una excepción

Creado en 4 mar. 2020  ·  3Comentarios  ·  Fuente: winstonjs/winston

Háblenos de su entorno:

  • _ winston versión? _ 3.2.1

    • [] winston@2

    • [x] winston@3

  • _ node -v salidas: _ v12.8.1
  • _Sistema operativo? _ (Windows, macOS o Linux) Windows
  • _Idioma? _ (Todos | TypeScript XX | ES6 / 7 | ES5 | Dart) ES6

¿Cuál es el problema?

Winston no parece registrar excepciones, no parece analizar correctamente el objeto de error.

const logger = winston.createLogger({
    level: 'info',
    format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
    transports: [
        new winston.transports.File({
            filename: `./logs/error-${momentLogger.unix()}.log`,
            level: 'error'
        }),
        new winston.transports.File({
            filename: `./logs/debug-${momentLogger.unix()}.log`,
            level: 'debug'
        }),
        new winston.transports.File({
            filename: `./logs/combined-${momentLogger.unix()}.log`
        }),
        new winston.transports.Console({
            format: winston.format.simple()
        })
    ]
});

try {
    logger.debug(folderIdRegex.exec(event.link)[1]);
} catch (ex) {
    console.log(ex); // Correctly prints
    logger.info(ex); // Undefined
    logger.debug(ex); // Undefined
    logger.error(ex); // Undefined
}

Depuración adicional con el depurador VSCode

// Output
TypeError: Cannot read property '1' of null
    at .....google-sheets-scraping-testing.js:188:51
    at processTicksAndRejections (internal/process/task_queues.js:85:5)
info: undefined {"timestamp":"2020-03-04T19:58:36.251Z"}
error: undefined {"timestamp":"2020-03-04T19:58:36.251Z"}

// Here I started using the built-in debug terminal
ex // Input into debug console
> TypeError: Cannot read property '1' of null // Result of ex
logger.log(ex) // Input into debug console
info: undefined {"timestamp":"2020-03-04T20:11:13.924Z"} // Result of logger.log(ex)
> DerivedLogger {_readableState: ReadableState, readable: true, _events: Object, _eventsCount: 3, _maxListeners: undefined, …}  // Result of logger.log(ex)

¿Qué esperas que suceda en su lugar?

Espero que Winston registre el error detectado del bloque try ... catch. Si en cambio paso ex.message lugar de solo ex , se genera correctamente. ex se define en todo el bloque de captura, pero Winston no parece capaz de analizarlo por alguna razón.

Otra información

Además, si return ex desde dentro del bloque de captura, y luego rodeo todo dentro de otro bloque de captura, parece generarlo correctamente. Para obtener más información sobre este comportamiento inusual, consulte la esencia aquí de una publicación de soporte que hice en Discord antes de darme cuenta de que se trata de un error con Winston.

Además, creo que este error también implica el problema que ha tenido otro usuario durante el último mes en el n. ° 1758

Comentario más útil

Creo que esto puede deberse a un comportamiento inconsistente entre los registradores de Winston y los transportes al aplicar formatos. En winston-transport, parte de la función TransportStream _write hace esto:

transformed = this.format.transform(Object.assign({}, info), this.format.options);

El código relevante en winston / logger.js parece que hace esto:

this.push(this.format.transform(info, this.format.options));

Aquí hay una reproducción simplificada del problema.

const winston = require('winston');

// First logger uses a format configured on logger
const logger1 = winston.createLogger({
  level: 'info',
  transports: new winston.transports.Console(),
  format: winston.format.simple()
});


// Second logger uses a format configured on transport
const logger2 = winston.createLogger({
  level: 'info',
  transports: new winston.transports.Console({
    format: winston.format.simple()
  })
});

logger1.info(new Error('err message'));   // logs expected 'err message'
logger2.info(new Error('err message'));   // logs 'undefined'

No tengo claro qué comportamiento debería preferir.

Todos 3 comentarios

Creo que esto puede deberse a un comportamiento inconsistente entre los registradores de Winston y los transportes al aplicar formatos. En winston-transport, parte de la función TransportStream _write hace esto:

transformed = this.format.transform(Object.assign({}, info), this.format.options);

El código relevante en winston / logger.js parece que hace esto:

this.push(this.format.transform(info, this.format.options));

Aquí hay una reproducción simplificada del problema.

const winston = require('winston');

// First logger uses a format configured on logger
const logger1 = winston.createLogger({
  level: 'info',
  transports: new winston.transports.Console(),
  format: winston.format.simple()
});


// Second logger uses a format configured on transport
const logger2 = winston.createLogger({
  level: 'info',
  transports: new winston.transports.Console({
    format: winston.format.simple()
  })
});

logger1.info(new Error('err message'));   // logs expected 'err message'
logger2.info(new Error('err message'));   // logs 'undefined'

No tengo claro qué comportamiento debería preferir.

Me pregunto si este también es el mismo caso cuando winston no registra correctamente algunos objetos y los imprime como [object Object] mientras que otros objetos se imprimen sin problemas

@jleverenz
¡Gracias, gran descubrimiento! Dio una solución simple a mi problema, que era lo mismo que https://github.com/winstonjs/winston/issues/1758

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