zoukankan      html  css  js  c++  java
  • 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,就可以游刃有余地处理这些日志信息了。

  • 相关阅读:
    Linux系统下DedeCMS安全设置详细教程
    乐淘网CEO毕胜:中国不具备购买玩具的文化
    生意
    Sql Server Cpu 100% 的常见原因及优化
    认准了就去做
    雷军谈互联网七字诀:天下武功唯快不破
    电商需要与实体结合才可行
    Xml Schema命名空间
    高效的MySQL分页
    正则
  • 原文地址:https://www.cnblogs.com/SoulSpirit/p/3565404.html
Copyright © 2011-2022 走看看