2015-04-01 155 views
0

在我的应用程序中,我在异步模式下使用Log4j2(使用Disruptor的异步记录器),有人可以告诉我如何处理记录过程中发生的异常。日志记录对于我的应用程序非常重要,我不想错过单个日志语句。如果记录出现问题,需要立即通知。如何在使用Log4j2异步日志记录时处理日志记录中的异常?

根据Apache Log4j page,建议使用ExceptionHandler,但我找不到帮助的话题了解如何使用它。

错误处理。如果在日志记录过程中发生问题并引发异常,则异步记录器或appender可能不太容易将此问题告知应用程序。这部分可以通过配置ExceptionHandler缓解 ,但这可能仍然不是 涵盖所有情况。因此,如果日志记录是逻辑的一部分,例如,如果您使用Log4j作为审计日志记录 框架,我们建议同步记录那些审核 消息。 (请注意,您仍然可以在另外将它们组合起来使用异步 日志记录调试/跟踪记录,以同步记录为 审计跟踪。)

等待建议。

回答

1

我建议首先尝试实现一个简单的类,实现ExceptionHandler接口并确认它在问题发生时被调用。一旦确认这一点,您可以继续实施自定义回退机制。

其次,开发强大的回退可能很困难:如果log4j失败的原因是磁盘已满或已损坏,则回退可能无法写入磁盘。类似地,您可能无法建立网络连接...我建议您的后备合并包含多个选项以增加其中一个选项成功的概率。

硬件价格便宜,所以考虑为您的回退机制添加单独的网卡或单独的硬盘。如果使用回退机制,请不要忘记发送通知,以便解决原始问题。

根据关键任务如何,您可能需要调查提供高可用性的供应商产品 - 这通常涵盖的不仅仅是日志记录,还不确定您的需求。