我使用的是FileAppender的一个国产变体,它附在AsyncAppender上。我正在为每个写线程创建一个FileAppender。我已经注意到,当我的线程停止时(在run()中结束while循环),FileAppender的缓冲区中仍然保留着数据。
sl4fj/logback中的写入线程是如何向现在已经完成的附加程序发出信号的?
谢谢
发布于 2017-07-18 09:11:14
听起来你有两个可能的隐瞒事件的来源:
根据日志文档,您可以强制FileAppender立即刷新:
<immediateFlush>true</immediateFlush>
根据文档,AsyncAppender将刷新…
在应用程序关闭或重新部署时,必须停止AsyncAppender,以便停止并恢复工作线程,并从队列中刷新日志事件。这可以通过停止LoggerContext来实现,它将关闭所有追加程序,包括任何AsyncAppender实例。AsyncAppender将等待工作线程刷新到maxFlushTime中指定的超时。如果发现队列事件在LoggerContext关闭期间被丢弃,则可能需要增加超时时间。为maxFlushTime指定值为0将迫使AsyncAppender在从stop方法返回之前等待所有排队事件被刷新。
只要(a)停止LoggerContext和(b)可以在maxFlushTime中指定的超时内刷新挂起的事件,那么就不会丢失任何事件。
但是,当然,您看到的是遗留下来的数据,所以…
immediateFlush特性相当的特性。https://stackoverflow.com/questions/44974467
复制相似问题