log4j里有个Appender:AsyncAppender,这个Appender是用于解决在某一时间里大量的日志信息进入Appender如何去处理的问题。AsyncAppender采用的方案是这样的,以下是AsyncAppender的工作原理图:
AsyncAppender采用的是生产者消费者的模型进行异步地将Logging Event送到对应的Appender中。
(1)生产者:外部应用了Log4j的系统的实时线程,实时将Logging Event传送进AsyncAppender里
(2)中转:Buffer和DiscardSummary
(3)消费者:Dispatcher线程和appenders
工作原理:
1) Logging Event进入AsyncAppender,AsyncAppender会调用append方法,在append方法中会去把logging Event填入Buffer中,当消费能力不如生产能力时,AsyncAppender会把超出Buffer容量的Logging Event放到DiscardSummary中,作为消费速度一旦跟不上生成速度,中转buffer的溢出处理的一种方案。
2) AsyncAppender有个线程类Dispatcher,它是一个简单的线程类,实现了Runnable接口。它是AsyncAppender的后台线程。
Dispatcher所要做的工作是:
① 锁定Buffer,让其他要对Buffer进行操作的线程阻塞。
② 看Buffer的容量是否满了,如果满了就将Buffer中的Logging Event全部取出,并清空Buffer和DiscardSummary;如果没满则等待Buffer填满Logging Event,然后notify Disaptcher线程。
③ 将取出的所有Logging Event交给对应appender进行后面的日志信息推送。
以上是AsyncAppender类的两个关键点:append方法和Dispatcher类,通过这两个关键点实现了异步推送日志信息的功能,这样如果大量的Logging Event进入AsyncAppender,就可以游刃有余地处理这些日志信息了。
- 大小: 29.5 KB
分享到:
相关推荐
"(转)Log4j的AsyncAppender能否提升性能"这个标题涉及到Log4j的一个特性——AsyncAppender,它是Log4j为了提高日志处理性能而引入的一种异步日志写入机制。 AsyncAppender的主要工作原理是通过使用单独的线程池来...
2. 异步日志:Log4j2支持异步日志记录,通过`AsyncAppender`实现,提高日志处理性能。 3. 捕获异常:使用`%throwable`占位符可以将异常堆栈信息完整地输出到日志。 总之,Spring Boot Starter Log4j2使得在Spring ...
首先,我们要理解Log4j2中的异步日志工作原理。默认情况下,Log4j2使用同步模式记录日志,即每个日志事件都会阻塞直到写入完成。然而,通过启用异步日志模式,Log4j2会将日志事件放入一个队列,然后由一个单独的后台...
1. **Async Logging**:Log4j 2引入了异步日志记录,通过使用Log4j的内部LoggerContext和AsyncAppender,可以显著提高日志性能,避免阻塞主线程。 2. **Lifecycle Management**:组件生命周期管理使日志配置的初始化...
在Log4j 2.10.0版本中,我们找到了进一步的优化和增强,这个版本的源码包含了这些改进的实现细节。 1. **配置灵活性**:Log4j 2.10.0支持XML、JSON、YAML、Properties等多种配置格式,允许开发者根据项目需求选择最...
这个zip文件"apache-log4j-2.9.0-src.zip"包含了Log4j 2.9.0版本的源代码,允许开发者深入理解其内部工作原理,进行定制化开发或排查问题。 Log4j 2.9.0源码中包含以下几个核心知识点: 1. **配置文件解析**:Log4...
Log4j 的源码可以帮助我们深入理解其工作原理,而相关工具如 LogViewer、LogFaces 可以提供图形化的日志查看和分析界面,提升开发效率。 总之,Log4j 的详细配置涵盖了日志级别设定、输出目的地、输出格式等多个...
Log4j 2.5引入了异步日志处理,通过`AsyncAppender`和`AsyncLogger`实现了日志输出的并发处理,避免了日志输出对主线程的影响。同时,使用了`LogEventPool`来复用`LogEvent`对象,减少内存分配和垃圾回收的开销。 ...
Log4j2的源码清晰易读,学习源码可以帮助理解其工作原理,比如日志事件的处理流程、配置解析机制等。这对于进行性能优化或开发自定义插件非常有帮助。 通过以上内容,你应该已经对Log4j2有了基本的了解,并能够将其...
本篇文章将详细探讨一个感觉还不错的Log4j配置文件,旨在帮助读者深入理解其工作原理和配置细节。 Log4j的核心在于其配置文件,通常命名为`log4j.properties`,它是通过Apache Log4j API定义日志输出格式、级别和...
LOG4J支持异步日志记录,通过AsyncAppender提高日志处理速度,避免阻塞应用程序主线程。同时,合理设置日志级别能显著减少不必要的日志输出,提高性能。 9. **与其他日志框架的对比** 虽然现在有其他日志框架如...
- 对于深入理解Log4J的工作原理,阅读源码是很好的方式,可以了解其内部的事件处理机制、线程安全策略等。 - 如果有特殊需求,可以扩展Log4J,实现自定义的Appender、Layout和Filter。 总的来说,Log4J提供了灵活...
Apache Log4j是Java平台上的一个著名日志记录框架,广泛应用于各种企业级软件系统中。Log4j 2.4版本的源码提供了一窥其内部实现的窗口,对于学习和理解日志处理机制、Java开发以及软件调试具有重要意义。下面我们将...
下面将详细介绍Log4j2异步日志打印机制的原理和实现方法。 什么是异步日志打印 异步日志打印是一种高效的日志记录机制,它使用单独的进程来执行日志打印的功能,从而减少对正常业务的影响。在Log4j2中,异步日志...
3. **SLF4J API**: SLF4J作为一个抽象层,允许开发者选择不同的日志实现,如logback、log4j等。`slf4j-api-1.7.26.jar`是SLF4J的API库,提供了一组简单的接口供应用代码使用,与具体的日志实现解耦。 接下来,我们...
Logback是Java世界里广泛使用的日志处理框架,它由Ceki Gülcü创建,作为Log4j的后继者,旨在提供更高的性能、更灵活的配置以及更低的内存占用。本手册将帮助读者快速掌握Logback的基本概念、配置方法以及在HAP框架...
Logback是一个在Java应用程序中用于处理日志的开源库,它是Log4j的后继者,由Ceki Gülcü创建,提供了更高的性能和更丰富的功能。 **描述解析:** 描述中的"logback-demos.rar" 提示我们这是一个压缩文件,包含了...
我们需要引入logback和slf4j的依赖,然后编写配置文件。配置文件的内容如下所示: ```xml <appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender"> [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%...