`
gt_11
  • 浏览: 3165 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Log4j中的AsyncAppender的实现原理

阅读更多
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,它是Log4j为了提高日志处理性能而引入的一种异步日志写入机制。 AsyncAppender的主要工作原理是通过使用单独的线程池来...

    spring-boot-starter-log4j2

    2. 异步日志:Log4j2支持异步日志记录,通过`AsyncAppender`实现,提高日志处理性能。 3. 捕获异常:使用`%throwable`占位符可以将异常堆栈信息完整地输出到日志。 总之,Spring Boot Starter Log4j2使得在Spring ...

    Log4j2异步写日志效率测试源码

    首先,我们要理解Log4j2中的异步日志工作原理。默认情况下,Log4j2使用同步模式记录日志,即每个日志事件都会阻塞直到写入完成。然而,通过启用异步日志模式,Log4j2会将日志事件放入一个队列,然后由一个单独的后台...

    apache-log4j-2.0-rc1-src

    1. **Async Logging**:Log4j 2引入了异步日志记录,通过使用Log4j的内部LoggerContext和AsyncAppender,可以显著提高日志性能,避免阻塞主线程。 2. **Lifecycle Management**:组件生命周期管理使日志配置的初始化...

    log4j2.10.0

    在Log4j 2.10.0版本中,我们找到了进一步的优化和增强,这个版本的源码包含了这些改进的实现细节。 1. **配置灵活性**:Log4j 2.10.0支持XML、JSON、YAML、Properties等多种配置格式,允许开发者根据项目需求选择最...

    apache-log4j-2.9.0-src.zip

    这个zip文件"apache-log4j-2.9.0-src.zip"包含了Log4j 2.9.0版本的源代码,允许开发者深入理解其内部工作原理,进行定制化开发或排查问题。 Log4j 2.9.0源码中包含以下几个核心知识点: 1. **配置文件解析**:Log4...

    Log4j 详细配置

    Log4j 的源码可以帮助我们深入理解其工作原理,而相关工具如 LogViewer、LogFaces 可以提供图形化的日志查看和分析界面,提升开发效率。 总之,Log4j 的详细配置涵盖了日志级别设定、输出目的地、输出格式等多个...

    log4j-2.5-src

    Log4j 2.5引入了异步日志处理,通过`AsyncAppender`和`AsyncLogger`实现了日志输出的并发处理,避免了日志输出对主线程的影响。同时,使用了`LogEventPool`来复用`LogEvent`对象,减少内存分配和垃圾回收的开销。 ...

    Log4j2使用教程

    Log4j2的源码清晰易读,学习源码可以帮助理解其工作原理,比如日志事件的处理流程、配置解析机制等。这对于进行性能优化或开发自定义插件非常有帮助。 通过以上内容,你应该已经对Log4j2有了基本的了解,并能够将其...

    一个Log4j配置文件,感觉还不错

    本篇文章将详细探讨一个感觉还不错的Log4j配置文件,旨在帮助读者深入理解其工作原理和配置细节。 Log4j的核心在于其配置文件,通常命名为`log4j.properties`,它是通过Apache Log4j API定义日志输出格式、级别和...

    深入学习LOG4J

    LOG4J支持异步日志记录,通过AsyncAppender提高日志处理速度,避免阻塞应用程序主线程。同时,合理设置日志级别能显著减少不必要的日志输出,提高性能。 9. **与其他日志框架的对比** 虽然现在有其他日志框架如...

    Log4J日志管理类使用详解

    - 对于深入理解Log4J的工作原理,阅读源码是很好的方式,可以了解其内部的事件处理机制、线程安全策略等。 - 如果有特殊需求,可以扩展Log4J,实现自定义的Appender、Layout和Filter。 总的来说,Log4J提供了灵活...

    apache-log4j-2.4-src.zip源码

    Apache Log4j是Java平台上的一个著名日志记录框架,广泛应用于各种企业级软件系统中。Log4j 2.4版本的源码提供了一窥其内部实现的窗口,对于学习和理解日志处理机制、Java开发以及软件调试具有重要意义。下面我们将...

    log4j2日志异步打印(实例讲解)

    下面将详细介绍Log4j2异步日志打印机制的原理和实现方法。 什么是异步日志打印 异步日志打印是一种高效的日志记录机制,它使用单独的进程来执行日志打印的功能,从而减少对正常业务的影响。在Log4j2中,异步日志...

    logback类库.rar

    3. **SLF4J API**: SLF4J作为一个抽象层,允许开发者选择不同的日志实现,如logback、log4j等。`slf4j-api-1.7.26.jar`是SLF4J的API库,提供了一组简单的接口供应用代码使用,与具体的日志实现解耦。 接下来,我们...

    HAP框架-Logback入门手册 .zip

    Logback是Java世界里广泛使用的日志处理框架,它由Ceki Gülcü创建,作为Log4j的后继者,旨在提供更高的性能、更灵活的配置以及更低的内存占用。本手册将帮助读者快速掌握Logback的基本概念、配置方法以及在HAP框架...

    logback例子

    Logback是一个在Java应用程序中用于处理日志的开源库,它是Log4j的后继者,由Ceki Gülcü创建,提供了更高的性能和更丰富的功能。 **描述解析:** 描述中的"logback-demos.rar" 提示我们这是一个压缩文件,包含了...

    Logback配置文件这么写(TPS提高10倍)

    我们需要引入logback和slf4j的依赖,然后编写配置文件。配置文件的内容如下所示: ```xml <appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender"> [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%...

Global site tag (gtag.js) - Google Analytics