- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我了解 AsyncAppender 在单独的线程中执行附加工作。他们为此使用 ArrayBlockingQueue。
与
AsyncLogger 使用 LMAX 中断库将日志事件从一个应用程序线程移动到另一个线程,与 AsyncAppender 相比它更快。
我的问题是,如果 AsyncLogger 更有效地完成了它所做的工作,为什么我们在 log4j2 中有 AsyncAppender。
如果我们将 AsyncAppender 与 AsyncLogger 一起使用会怎样? AsyncLogger 和 AsyncAppender 还有什么区别吗?
最佳答案
没错,它们的目的几乎相同,所以我可以理解您的问题:“为什么有两种选择”?
作为背景,AsyncAppender 从一开始就在 Log4j2 中,去年 3 月(2014 年)添加了 Async Loggers。这就是现在的情况。
log4j 团队目前并未认真考虑移除 AsyncAppender。要记住的一件事是,Async Loggers 有一个外部依赖项(LMAX 中断器 jar),其中 AsyncAppender 仅与 log4j2-api 和 log4j2-core jar 一起工作。
要回答您的最后一个问题,可以将 AsyncAppender 与 Async Loggers 结合使用,但您不会有任何收获。这尚未经过测试。我还没有检查,但是在将日志事件从 Async Logger 线程移交给 AsyncAppender 线程时,位置信息可能会丢失。我不建议这样做。
更新(2014 年 6 月 23 日):我做了一些测试,将 AsyncAppender 与 AsyncLoggers 结合使用时存在一些问题。这些在 RC2 中是固定的。我仍然不建议这样做,因为它只是添加了另一个使用 CPU/内存的中间步骤,而没有任何贡献。
更新 (2016/7/20):另一个区别:从 2.6 版开始,Log4j 2 可以使用 Async Loggers 实现无垃圾,但不能使用 AsyncAppender。
在下面的评论中回答您的第二个问题:AsyncAppender 有自己的队列和线程,其中 AsyncLoggers 使用 LMAX Disruptor ringbuffer 作为队列并使用 Executor 线程。
关于java - Log4j2 中 AsyncLogger 和 AsyncAppender 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24177601/
我目前正在学习 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
我是一名优秀的程序员,十分优秀!