0
大きなジャクソンのJsonNode
オブジェクトがメモリにあります。デバッグ/トレースの目的で、適切なログレベルでSLF4J-Logbackを使用してこれらのログを記録しています。大きなJSONオブジェクトをSLF4Jに段階的に記録する
出力文字列のサイズが大きいため、OutOfMemoryの例外とクラッシュが発生します。これらのJsonNode
オブジェクトはすでにメモリに格納されているため、解析の問題ではありません。
きれいに印刷された文字列を徐々にすべてを生成するのではなく、SLF4Jに徐々に "ストリーム"する方法はありますか?私はこのようなコード使用してい
:あなたはlogstash-logback-エンコーダを使用して試すことができた場合
Logger logger = LoggerFactory.getLogger(MyClass.class);
...
ObjectWriter prettyPrintWriter = new ObjectMapper().writerWithDefaultPrettyPrinter();
...
if (logger.isTraceEnabled()) {
try {
String dataString = prettyPrintWriter.writeValueAsString(dataNode);
logger.trace(dataString);
} catch (JsonProcessingException ignored) { }
}
正確なスタックトレースを提供できますか? –
また、Log4j 'Logger'はストリーミング操作を提供していないようで、ログメッセージはguaraneteeに書き込まれたものとみなされ、メッセージ全体がログに書き込まれます。 'JsonNode'の最初の_n_文字だけを書くとどうなりますか? –
@LyubomyrShaydariv私たちはSLF4JのLogback実装を使用します。これは単なるデバッグ/トレースであり、ログのデータの完全性は大きな問題ではありません。 JSONが部分的に印刷されているかどうかを簡単に知ることができます。 – metacubed