2

JSONでログファイルを書き込もうとしています。

書式設定のインスピレーションとベスト プラクティス (Node.JS の Winston、Apache の JSON ロギング オプションなど) についていくつかのライブラリを調べた後、それらのほとんどすべてが配列またはルート要素を使用するのではなく、複数のルート要素を記述することに気付きました。

例:

{"time":"2012-09-20T20:27:59Z","level":"info","message":"Hello World"} {"time":"2012-09-20T21:37:59Z" ,"レベル":"情報","メッセージ":"こんにちは"}

対。

[{"time":"2012-09-20T20:27:59Z","level":"info","message":"Hello World"},{"time":"2012-09-20T21:37: 59Z","レベル":"情報","メッセージ":"こんにちは"}]

複数のルート要素を持つことは技術的に有効な JSON ではないのに、なぜこれが行われるのですか?

4

2 に答える 2

4

ログを記録するときは、新しいログ エントリを追加し続けます。アレイを閉じるタイミングをどのように知ることができますか? ロギングが「完了」したのはいつですか? 空の配列でログを開始することもできますが[]、エントリを追加するときは、ファイル内を探し続けて正しい場所を見つけ、コンマが必要かどうかを確認する必要があります。

または、各エントリを個別のルート オブジェクトとして書き込むだけで、何かを書き出すたびに独立してファイルの末尾に追加されます。それははるかに簡単です。

ログは単一の JSON オブジェクトではありません。つまり、ログ全体が有効な JSON 文字列を形成するわけではありません。これは、独立した JSON オブジェクトのシーケンスです。ログ全体ではなく、個々のエントリが考慮すべき単位です。

于 2013-01-08T02:50:41.767 に答える
0

ログは毎秒増加しているためです。

ルート要素がなければ、新しいログは古いアイテムに追加されるだけです。ルート要素がある場合、または配列内にある場合は、新しいログ項目を照会して追加する必要があります。

だから、あなたは正しい選択をしています。

于 2013-01-08T02:52:35.007 に答える