0
私はlogbackを使用しています。クライアントから照会されたすべてのデータをログファイルに記録する必要があります。クライアントが照会するすべてのデータは、同じファイルに記録する必要があります。ロギングプロセスは、単純に以下のようになります。大きなサイズの文字列をJavaでログに記録
private static final OUTPUTFILELOGGER = Logger.getLogger(...);
String outputString = null;
try {
Map<String, Object> outputMap = doService(); // queries data requested by clients.
.... // do something after business logic..
outputLog = outputMap.toString(); // critical!!
} catch (Throwable e) {
handling exception
} finally {
OUTPUTFILELOGGER.info(outputString);
}
それは通常、正常に動作しますが、要求されたデータは、文字列を作るには大きすぎるとき時にはそれがoutputMap変数へのtoStringの呼び出しでOutOfMemoryErrorが発生します。
私はそれをパフォーマンスに問題なくストリーミングの仕方で動作させたいと思っています。そして私はそれを効果的かつ優雅にする方法を知らない。
マップはのために十分な大きさである場合
はLOGGER.info("Map contains:")
map.forEach((key, value) -> LOGGER.info("{}: {}", key, value));
(Javaの8想定しており、SLF4J)しかし
:あなたが一度に小さな部分で作業しているように、マップを通じて