首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileAppender -> AsyncAppender刷新信号

FileAppender -> AsyncAppender刷新信号
EN

Stack Overflow用户
提问于 2017-07-07 15:23:26
回答 1查看 1.2K关注 0票数 2

我使用的是FileAppender的一个国产变体,它附在AsyncAppender上。我正在为每个写线程创建一个FileAppender。我已经注意到,当我的线程停止时(在run()中结束while循环),FileAppender的缓冲区中仍然保留着数据。

sl4fj/logback中的写入线程是如何向现在已经完成的附加程序发出信号的?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-18 09:11:14

听起来你有两个可能的隐瞒事件的来源:

  • AsyncAppender
  • FileAppender

根据日志文档,您可以强制FileAppender立即刷新:

<immediateFlush>true</immediateFlush>

根据文档,AsyncAppender将刷新…

在应用程序关闭或重新部署时,必须停止AsyncAppender,以便停止并恢复工作线程,并从队列中刷新日志事件。这可以通过停止LoggerContext来实现,它将关闭所有追加程序,包括任何AsyncAppender实例。AsyncAppender将等待工作线程刷新到maxFlushTime中指定的超时。如果发现队列事件在LoggerContext关闭期间被丢弃,则可能需要增加超时时间。为maxFlushTime指定值为0将迫使AsyncAppender在从stop方法返回之前等待所有排队事件被刷新。

只要(a)停止LoggerContext和(b)可以在maxFlushTime中指定的超时内刷新挂起的事件,那么就不会丢失任何事件。

但是,当然,您看到的是遗留下来的数据,所以…

  • 如果数据留在AsyncAppender中,那么只需确保您正在关闭LoggingContext (您可以使用停机钩来确保这种情况的发生)
  • 如果数据被遗留在FileAppender的本地变体中,那么请考虑在附录中添加一个与logback的immediateFlush特性相当的特性。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44974467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档