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