Winston: El formato json de la versión 3.0.0-rc1 no formatea correctamente la cadena de metadatos

Creado en 23 oct. 2017  ·  4Comentarios  ·  Fuente: winstonjs/winston

logger.info (mensaje, "abc");

La salida es:
{"0": "a", "1": "b", "2": "c", "nivel": "información", "mensaje": "mensaje"}

Supongo que esto se debe a que la metacadena se combina en el objeto antes de encadenar. Se ve mucho peor con el seguimiento de la pila (matriz enorme). Tal vez en tal caso la salida debería ser:
{"metadata": "abc", "nivel": "información", "mensaje": "mensaje"}

docs

Comentario más útil

ACTUALIZAR:
El formato simple también tiene este problema:
Producción:
info: mensaje {"0": "a", "1": "b", "2": "c"}

Todos 4 comentarios

ACTUALIZAR:
El formato simple también tiene este problema:
Producción:
info: mensaje {"0": "a", "1": "b", "2": "c"}

Esto se puede lograr usando formatos personalizados en [email protected] . Considere actualizar.

Esta no es una llamada API admitida en winston ; está proporcionando una cadena como metadatos, no un objeto. Aquí hay algunas llamadas API válidas:

// winston<strong i="7">@2</strong> API:
logger.log('info', 'Hello world', { custom: true });
logger.log('info', new Error('Yo, it\'s on fire'));
logger.log('info', '%s %d%%', 'A string', 50, { thisIsMeta: true });

// winston<strong i="8">@3</strong> API – a single JSON literal:
logger.log({ level: 'info', message: 'Hello world', custom: true });
logger.log({ level: 'info', message: new Error('Yo, it\'s on fire') });
logger.log({
  level: 'info',
  message: '%s %d%%',
  splat: ['A string', 50],
  meta: { thisIsMeta: true }
});

Si desea una salida similar a esta:

{"metadata":"abc","level":"info","message":"message"}

entonces haz esto:

logger.info('message', { metadata: 'abc' });

... vamos a dejar este ticket abierto como un error de documentación para explicar mejor cómo funciona la variable arity en las API de registro centrales de winston .

@ChrisAlderson FYI, la razón por la que esto no es un problema de formato personalizado se debe a este bloque de código :

const info = Object.assign({}, meta, {
  [LEVEL]: level,
  level,
  message: msg
});

dado que meta es una cadena en este caso - "abc" se convierte en el objeto {"0":"a","1":"b","2":"c"} que es entonces la base del info en el futuro.

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