gpt4 book ai didi

java - 什么时候默认不在 logback 中使用 AsyncAppender

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:42 24 4
gpt4 key购买 nike

Logback 支持对类使用异步附加程序ch.qos.Logback.classic.AsyncAppender 根据文档,这将减少应用程序的日志记录开销。那么,为什么不直接将其设置为默认值呢?使用同步附加程序可以更好地服务于哪些用例。我在 Async appender 中看到的一个问题是日志消息不会按时间顺序排列。还有其他类似的限制吗?

最佳答案

AsyncAppender 充当另一个 appender 的调度程序。它缓冲日志事件并将它们分派(dispatch)给例如 FileAppenderConsoleAppender 等。

  • 为什么要使用 AsyncAppender

    • AsyncAppender 缓冲日志事件,允许您的应用程序代码继续运行,而不是等待日志子系统完成写入。这可以在底层 appender 响应缓慢的情况下提高应用程序的响应能力,例如可能容易发生争用的数据库或文件系统。
  • 为什么不将其设为默认行为?

    • AsyncAppender 无法写入文件、控制台、数据库或套接字等。相反,它只是将日志事件委托(delegate)给可以执行此操作的附加程序。如果没有底层 appender,AsyncAppender 实际上是一个空操作。
    • 日志事件的缓冲区位于应用程序的堆上;这是潜在的资源泄漏。如果缓冲区建立的速度快于它可以耗尽的速度,那么缓冲区将消耗您的应用程序可能想要使用的资源。
    • AsyncAppender 需要配置来平衡无丢失和资源泄漏的竞争需求,并处理其缓冲区的关闭时耗尽,这意味着管理和推理更加复杂大约比简单地使用同步写入。因此,在重简轻繁的基础上,Logback 的默认写入策略同步是有意义的。

AsyncAppender 公开了可用于解决潜在资源泄漏的配置杠杆。例如:

  • 你可以增加缓冲能力
  • 您可以指示 Logback 在缓冲区达到最大容量后丢弃事件
  • 您可以控制丢弃哪些类型的事件;在 ERROR 事件等之前删除 TRACE 事件

AsyncAppender 还公开了配置杠杆,您可以使用这些杠杆来限制(但不能消除)应用程序关闭期间的事件丢失。

但是,确保成功写入日志事件的最简单最安全的方法仍然是同步写入它们。 AsyncAppender 仅当您遇到已证实的问题,即写入 appender 会严重影响您的应用程序响应能力/吞吐量时,才应考虑。

关于java - 什么时候默认不在 logback 中使用 AsyncAppender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47372092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com