我正在考虑创建一个新的记录器以在内部保存日志语句,直到发生错误。
所以在我正在研究的系统中,它是一个序列过程(没有并行工作,具有设置的起点和终点)。我希望将我的info()行缓冲在内存和放大器中。最后,如果发生错误,将它们清除,或者如果它成功则不要记录它们。
我不太担心内存使用,一次只有15行(跨几个类)。 但由于它可以每秒处理100个项目(每个项目创建15行),因此日志记录可能会变得冗长,而不需要的数据。
另一个选项是它可以记录到一个主文件。 然后,如果发生错误,请将最后一个缓冲区刷新为ERROR日志。
有没有人知道SLF4J-LogWriter或LOG4J-Appender在创建我自己之前已经这样做了?
我可以看到http://sling.apache.org(org.apache.sling.scripting.core.impl.LogWriter)已经做了类似的事情,但可能会要求我破解代码。
由于 杰夫波特
答案 0 :(得分:2)
我为log4j和logback做了同样的事情; AFAIK,没有现成的解决方案。
为了增加实用性,我的实现缓冲了所有级别的日志消息,您可以配置每个级别保留的消息数。
记录错误时,我会按顺序转储所有邮件。
一些意见:
AtomicInteger
或AtomicLong
为每封邮件提供唯一ID。稍后您将需要将它们分类为来自不同缓冲区的订单。