Logback支持在类中使用async appender
ch.qos.Logback.classic.AsyncAppender
并且根据文档,这将减少应用程序的日志记录开销。那么,为什么不把它作为开箱即用的默认设置。使用同步追加器可以更好地服务于哪些用例。我可以通过Async appender看到的一个问题是日志消息不是按时间顺序排列的。还有其他这样的限制吗?
答案 0 :(得分:7)
AsyncAppender
充当另一个appender的调度程序。它会缓冲日志事件并将其发送到FileAppender
或ConsoleAppender
等。
为什么要使用AsyncAppender
?
AsyncAppender
缓冲日志事件,允许您的应用程序代码继续前进,而不是等待日志子系统完成写入。这可以提高您的应用程序的响应能力,以防下层的appender响应缓慢,例如数据库或文件系统,可能容易发生争用。 为什么不将它设为默认行为?
AsyncAppender
无法写入文件或控制台或数据库或套接字等。相反,它只是将日志事件委托给可以执行此操作的追加程序。没有底层的appender,AsyncAppender实际上是一个无操作。AsyncAppender
需要进行配置以平衡无损和资源泄漏的竞争需求,并处理其缓冲区的关闭耗尽意味着管理和推理更加复杂而不仅仅是使用同步写入。因此,基于简单优先于复杂性,Logback的默认写策略是同步的。 AsyncAppender
公开配置杠杆,您可以使用它来解决潜在的资源泄漏问题。例如:
AsyncAppender
还公开了配置杠杆,您可以使用这些杠杆来限制(但不能消除)应用程序关闭期间的事件丢失。
但是,确保成功写入日志事件的最简单最安全的方法仍然是同步写入它们。 AsyncAppender
只有在您有一个经过验证的问题时才应考虑,即写入appender会严重影响您的应用程序响应/吞吐量。