0
我在內存中有一些大型的Jackson JsonNode
對象。爲了調試/跟蹤的目的,我使用SLF4J-Logback以適當的日誌級別記錄這些日誌。增量記錄大型JSON對象到SLF4J
這會導致OutOfMemory異常和崩潰,因爲輸出字符串的大小很大。請注意,這些JsonNode
對象已經在內存中,所以它不是解析問題。
有沒有什麼辦法讓Jackson逐漸將漂亮的字符串「串流」到SLF4J而不是一次生成它?
我用類似這樣的代碼:
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'似乎沒有提供流式操作,並且日誌消息很可能應該寫入保衛者中,整個消息寫入日誌。如果你只寫了'JsonNode'的第一個_n_字符會怎麼樣? –
@LyubomyrShaydariv我們使用SLF4J的Logback實現。這只是調試/追蹤,日誌中的數據完整性並不是一個大問題。您可以輕鬆判斷JSON是否部分打印。 – metacubed