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