Winston: バージョン3.0.0-rc1jsonフォーマットがメタ文字列を適切にフォーマットしていません

作成日 2017年10月23日  ·  4コメント  ·  ソース: winstonjs/winston

logger.info(message、 "abc");

出力は次のとおりです。
{"0": "a"、 "1": "b"、 "2": "c"、 "level": "info"、 "message": "message"}

これは、文字列化の前にメタ文字列がオブジェクトに結合されているためだと思います。スタックトレース(巨大な配列)を使用すると、見た目がはるかに悪くなります。 たぶん、そのような場合の出力は次のようになります。
{"metadata": "abc"、 "level": "info"、 "message": "message"}

docs

最も参考になるコメント

アップデート:
単純なフォーマットにもこの問題があります。
出力:
情報:メッセージ{"0": "a"、 "1": "b"、 "2": "c"}

全てのコメント4件

アップデート:
単純なフォーマットにもこの問題があります。
出力:
情報:メッセージ{"0": "a"、 "1": "b"、 "2": "c"}

これは、 [email protected]カスタム形式を使用して実現できます。 アップグレードを検討してください。

これはwinstonでサポートされているAPI呼び出しではありません。オブジェクトではなく、メタデータとして文字列を提供しています。 有効なAPI呼び出しは次のとおりです。

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

これに似た出力が必要な場合:

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

次に、これを行います。

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

... winstonのコアロギングAPIで可変アリティがどのように機能するかをよりよく説明するために、このチケットをドキュメントのバグとして開いたままにしておきます。

@ChrisAlderson参考までに、これがカスタム形式の問題ではない理由は、このコードブロックが原因

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

この場合、 metaは文字列であるため、 "abc"はオブジェクト{"0":"a","1":"b","2":"c"}これが今後のinfoのベースになります。

このページは役に立ちましたか?
0 / 5 - 0 評価