- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Logback 支持对类使用异步附加程序ch.qos.Logback.classic.AsyncAppender
根据文档,这将减少应用程序的日志记录开销。那么,为什么不直接将其设置为默认值呢?使用同步附加程序可以更好地服务于哪些用例。我在 Async appender 中看到的一个问题是日志消息不会按时间顺序排列。还有其他类似的限制吗?
最佳答案
AsyncAppender
充当另一个 appender 的调度程序。它缓冲日志事件并将它们分派(dispatch)给例如 FileAppender
或 ConsoleAppender
等。
为什么要使用 AsyncAppender
?
AsyncAppender
缓冲日志事件,允许您的应用程序代码继续运行,而不是等待日志子系统完成写入。这可以在底层 appender 响应缓慢的情况下提高应用程序的响应能力,例如可能容易发生争用的数据库或文件系统。为什么不将其设为默认行为?
AsyncAppender
无法写入文件、控制台、数据库或套接字等。相反,它只是将日志事件委托(delegate)给可以执行此操作的附加程序。如果没有底层 appender,AsyncAppender 实际上是一个空操作。AsyncAppender
需要配置来平衡无丢失和资源泄漏的竞争需求,并处理其缓冲区的关闭时耗尽,这意味着管理和推理更加复杂大约比简单地使用同步写入。因此,在重简轻繁的基础上,Logback 的默认写入策略同步是有意义的。AsyncAppender
公开了可用于解决潜在资源泄漏的配置杠杆。例如:
AsyncAppender
还公开了配置杠杆,您可以使用这些杠杆来限制(但不能消除)应用程序关闭期间的事件丢失。
但是,确保成功写入日志事件的最简单最安全的方法仍然是同步写入它们。 AsyncAppender
仅当您遇到已证实的问题,即写入 appender 会严重影响您的应用程序响应能力/吞吐量时,才应考虑。
关于java - 什么时候默认不在 logback 中使用 AsyncAppender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47372092/
我目前正在学习 Log4j,我正在使用的书正在解释 AsyncAppenders。我将缓冲区大小设置为 128 (LoggingEvents)。书中解释说,在达到缓冲区大小之前不会打印任何消息,但是无
我们有一个高速、大容量的应用程序,它正在使用 log4j。通常我们一直在使用 SyslogAppender,认为它是重量最轻、速度最快的附加程序。但是我们看到 SYSLOG 在高容量下的 CPU 使用
我通过在其中添加自己的 SUMMARY_APPENDER 创建了一个 AsyncAppender。 ASYNC Appender 如下所示 2 --> 我创建了另一个 SUMMARY
我正在编写一个 JMH 基准来测试 logback 的 AsyncAppender 的性能。 作为起点,我查看了 log4j2 的性能测试,但看起来它们不是端到端的测量。比如这里测试Log4j2 As
我在我的应用程序中使用 Log4J AsyncAppender,我想知道,当我的应用程序完成时,AsyncAppender 的线程会发生什么?我应该手动终止线程还是可以忘记它并退出我的应用程序而不用担
我在这方面遇到了一些麻烦,尽管我已经搜索了答案,但还是找不到。 为了使用 AsyncAppender,我看到了很多不同的 log4j 配置,无论如何,它们都与 .properties 配置文件无关。
如何在 log4j 中使用 AsyncAppender 将日志消息写入 Web 服务?我应该创建自己的 Appender 来扩展 AsyncAppender 还是只将自定义 appender 附加到
我正在使用附加到 AsyncAppender 的 FileAppender 的本地变体。我正在为每个写入线程创建一个 FileAppender。我注意到当我的线程停止时(在 run() 的 while
Logback 支持对类使用异步附加程序ch.qos.Logback.classic.AsyncAppender 根据文档,这将减少应用程序的日志记录开销。那么,为什么不直接将其设置为默认值呢?使用同
假设我使用 logger.info 记录两个事件,其中 logger 声明为 private static Logger logger = LoggerFactory.getLogger(SomeCl
我正在尝试将 AsyncLogger 添加到 log4j.properties。我找到了将 AsyncLogger 添加到 lo4j.xml 文件而不是 log4j.properties 的示例。你能
我现在使用的堆栈是: log4j2 rc1 spring 3.2 核心和网络 tomcat 7.0.47 Java 1.6.0_45 Windows 7 我没有能力更改 tomcat 版本或 java
我发现 logback 异步日志提供的性能比同步日志差。详情如下。 我可能遗漏了什么? 测试类: import org.slf4j.Logger; import org.slf4j.LoggerFac
当使用 Logback 的 AsyncAppender 时,消息会先排队再发送被写入最终目的地(取决于哪个 Appender你用 AsyncAppender 包装)。到目前为止,一切都很好。 当我的程
阅读http://blog.takipi.com/how-to-instantly-improve-your-java-logging-with-7-logback-tweaks/ ,建议FileAp
我了解 AsyncAppender 在单独的线程中执行附加工作。他们为此使用 ArrayBlockingQueue。 与 AsyncLogger 使用 LMAX 中断库将日志事件从一个应用程序线程移动
我已将 log4j2.properties 定义为 ... appender.async.type = Async appender.async.name = async
我需要通过 logback 在 java 中组织异步日志记录。使用了 AsyncAppender 类,它有一个名为 queueSize 的参数。当达到队列的阈值时,该参数会影响 INFO 级别和更低级
在 log4net 版本 1.2.11 中有 log4net.Appender.AsyncAppender 类。 我的以下 log4net 配置适用于 1.2.11 版本的 log4net:
我在线程“主”java.lang.ExceptionInInitializerError 中收到错误“异常”由以下原因引起:org.apache.logging.log4j.core.config.C
我是一名优秀的程序员,十分优秀!