Winston: Version 3.0.0-rc1 json-Format formatiert Meta-String nicht richtig

Erstellt am 23. Okt. 2017  ·  4Kommentare  ·  Quelle: winstonjs/winston

logger.info(Nachricht, "abc");

Ausgabe ist:
{"0":"a","1":"b","2":"c","level":"info","message":"Nachricht"}

Ich denke, das liegt daran, dass der Meta-String vor dem Stringifing mit dem Objekt kombiniert wird. Mit Stack-Trace (riesiges Array) sieht es viel schlimmer aus. Vielleicht sollte eine solche Fallausgabe sein:
{"metadata":"abc","level":"info","message":"message"}

docs

Hilfreichster Kommentar

AKTUALISIEREN:
einfaches Format hat auch dieses Problem:
Ausgabe:
Info: Nachricht {"0":"a","1":"b","2":"c"}

Alle 4 Kommentare

AKTUALISIEREN:
einfaches Format hat auch dieses Problem:
Ausgabe:
Info: Nachricht {"0":"a","1":"b","2":"c"}

Dies kann mit benutzerdefinierten Formaten in [email protected] . Bitte erwägen Sie ein Upgrade.

Dies ist kein unterstützter API-Aufruf in winston – Sie stellen einen String als Metadaten bereit, kein Objekt. Hier sind einige gültige API-Aufrufe:

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

Wenn Sie eine Ausgabe wünschen, die dieser ähnelt:

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

dann mach das:

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

... werde dieses Ticket als Dokumentationsfehler offen lassen, um besser zu erklären, wie die Variablenarität in den zentralen Protokollierungs-APIs von winston funktioniert.

@ChrisAlderson FYI Der Grund, warum dies kein benutzerdefiniertes Formatproblem ist, liegt an diesem Codeblock :

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

da meta in diesem Fall ein String ist – "abc" es zum Objekt {"0":"a","1":"b","2":"c"} das dann die Basis von info .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen