`
风过无声
  • 浏览: 92441 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

LOGBACK AsyncAppender

 
阅读更多
AsyncAppender,异步记录日志
工作原理:
当Logging Event进入AsyncAppender后,AsyncAppender会调用appender方法,append方法中在将event填入Buffer(这里选用的数据结构为BlockingQueue)中前,会先判断当前buffer的容量以及丢弃日志特性是否开启,当消费能力不如生产能力时,AsyncAppender会超出Buffer容量的Logging Event的级别,进行丢弃,作为消费速度一旦跟不上生产速度,中转buffer的溢出处理的一种方案。AsyncAppender有个线程类Worker,它是一个简单的线程类,是AsyncAppender的后台线程,所要做的工作是:从buffer中取出event交给对应的appender进行后面的日志推送。

从上面的描述中可以看出,AsyncAppender并不处理日志,只是将日志缓冲到一个BlockingQueue里面去,并在内部创建一个工作线程从队列头部获取日志,之后将获取的日志循环记录到附加的其他appender上去,从而达到不阻塞主线程的效果。因此AsynAppender仅仅充当事件转发器,必须引用另一个appender来做事。

在使用AsyncAppender的时候,有些选项还是要注意的。由于使用了BlockingQueue来缓存日志,因此就会出现队列满的情况。正如上面原理中所说的,在这种情况下,AsyncAppender会做出一些处理:默认情况下,如果队列80%已满,AsyncAppender将丢弃TRACE、DEBUG和INFO级别的event,从这点就可以看出,该策略有一个惊人的对event丢失的代价性能的影响。另外其他的一些选项信息,也会对性能产生影响,下面列出常用的几个属性配置信息:

属性名 类型 描述
queueSize int BlockingQueue的最大容量,默认情况下,大小为256。
discardingThreshold int 默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。
includeCallerData boolean 提取调用者数据的代价是相当昂贵的。为了提升性能,默认情况下,当event被加入到queue时,event关联的调用者数据不会被提取。默认情况下,只有"cheap"的数据,如线程名。

 

 

 

默认情况下,event queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。
e.g.
<appender name="FILE" class= "ch.qos.logback.core.rolling.RollingFileAppender">  
            <!-- 按天来回滚,如果需要按小时来回滚,则设置为{yyyy-MM-dd_HH} -->  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                 <fileNamePattern>/opt/log/test.%d{yyyy-MM-dd}.log</fileNamePattern>  
                 <!-- 如果按天来回滚,则最大保存时间为1天,1天之前的都将被清理掉 -->  
                 <maxHistory>30</maxHistory>  
            <!-- 日志输出格式 -->  
            <layout class="ch.qos.logback.classic.PatternLayout">  
                 <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern>  
            </layout>  
</appender>  
     <!-- 异步输出 -->  
     <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">  
            <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->  
            <discardingThreshold >0</discardingThreshold>  
            <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->  
            <queueSize>512</queueSize>  
            <!-- 添加附加的appender,最多只能添加一个 -->  
         <appender-ref ref ="FILE"/>  
     </appender>  
       
     <root level ="trace">  
            <appender-ref ref ="ASYNC"/>  
     </root>  
 
摘自
http://blog.csdn.net/zhuyucheng123/article/details/21524549
分享到:
评论

相关推荐

    Tomcat日志catalina.out过大解决方案--使用logback按日轮转.rar

    handlers = 1.org.apache.juli.FileHandler, ch.qos.logback.classic.AsyncAppender ... ch.qos.logback.classic.AsyncAppender.appenderRef = FILE ch.qos.logback.classic.AsyncAppender.threshold = ALL ch.qos....

    logback-slf4j日志配置文件-下载即可使用

    logback-slf4j还提供了异步日志模式,通过 `&lt;appender name ="ASYNCERROR" class= "ch.qos.logback.classic.AsyncAppender"&gt;` 组件来实现异步日志输出。 使用lombok logback-slf4j还可以与lombok结合使用,通过...

    logbackーslf4j-配置文件实例 难得

    通过使用AsyncAppender,日志记录操作将在后台线程中执行,不会阻塞应用程序的主线程。 ### 8. 日志归档和滚动 Logback允许配置日志文件的归档策略,例如按日期、大小等条件滚动。这有助于管理日志文件的大小和...

    logback类库.rar

    最后,logback支持异步日志记录,通过`AsyncAppender`可以提高日志性能,避免日志输出对应用程序的性能影响。此外,还可以使用过滤器(Filter)来控制哪些日志事件会被记录,例如只记录特定级别的日志或根据日志消息...

    logback-demo项目日志记录

    此外,通过使用`AsyncAppender`,可以实现日志的异步记录,提高系统的整体性能,尤其是在高并发环境下。 **日志管理和监控** 在生产环境中,日志的管理变得尤为重要。`logback-demo`项目可能会展示如何利用Logback...

    Logback配置文件根据 LEVEL级别将日志分类保存到不同文件.docx

    &lt;appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender"&gt; ``` 3. 文件滚动策略 Logback提供了多种文件滚动策略,例如`SizeAndTimeBasedRollingPolicy`,可以根据文件大小和时间进行...

    logback例子

    8. **异步日志**:Logback支持异步日志记录,通过AsyncAppender可以提高日志性能,避免阻塞应用程序。 9. **日志性能**:Logback相对于其他日志框架(如Log4j)有更高的性能,因为它在设计时就考虑了效率和资源利用...

    Logback中文文档

    Logback 提供了异步日志记录的功能,通过 AsyncAppender 类,可以提高日志记录的性能,避免阻塞应用程序主线程。 **日志归档和大小限制** 通过 RollingFileAppender,Logback 可以自动管理日志文件的大小和数量,...

    10 reasons to use logback !------log4j他爹告诉你为何要使用新的日志包logback

    5. 异步日志处理:logback的`AsyncAppender`组件能够以非阻塞方式处理日志事件,从而避免因日志输出导致的性能瓶颈。 6. 模块化设计:logback分为核心、经典和-access三个模块,分别处理不同类型的日志需求,使得...

    logback 使用

    引入 `logback-classic` 的依赖,并在配置中使用 `AsyncAppender` 类。 6. **自定义 Appender 和 Layout**: 如果标准的 Appender 或 Layout 不满足需求,可以通过继承 Logback 类并重写相关方法来自定义自己的实现...

    logback高级使用例子

    &lt;appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"&gt; ``` **日志回滚和大小限制** Logback提供`SizeBasedRollingPolicy`和`TimeBasedRollingPolicy`策略,可以按日志文件大小或时间...

    logback-spring.xml日志打印demo

    &lt;appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"&gt; ``` 以上就是`logback-spring.xml`日志打印输出的基本概念和配置方法。在实际项目中,可以根据需求调整配置,实现定制化的日志...

    Logback+slf4j【进阶】【实例】.docx

    通过使用`AsyncAppender`,可以将日志记录操作放在单独的线程中处理。 - 日志分级:通过`&lt;logger&gt;`标签可以定义特定包或类的日志级别,实现精细化控制。 - 日志路由:利用`RoutingAppender`,可以根据不同的条件将...

    JAVA日志组件系列(二)logback1.0.13and sli4j1.7.5

    此外,logback还支持异步日志记录,通过`AsyncAppender`可以提高日志处理的效率,避免阻塞应用程序的主线程。同时,`Filter`元素允许我们根据特定条件过滤日志消息。 在压缩包文件`logback_slf4j_pom`中,可能包含...

    logback开发文档

    1. 使用异步日志:通过 AsyncAppender 类,可以实现日志事件的异步处理,减少主线程的阻塞。 2. 配置日志级别:根据实际需求设置合适的日志级别,避免过多的无用日志输出。 3. 使用缓存:通过配置,可以利用缓存减少...

    SpringBoot中自定义日志配置logback-spring.xml示例源码

    &lt;appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender"&gt; ``` 9. **最后的配置文件**: 完整的`logback-spring.xml`可能如下所示: ```xml ...

    Logback用户手册中文版

    &lt;appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender"&gt; ``` ### 6. 高级特性 - **SizeBasedTriggeringPolicy**: 当日志文件大小达到预设值时,自动滚动创建新的日志文件。 - **...

    logback.jar

    Logback设计上注重性能,它采用了异步日志记录机制,通过使用`AsyncAppender`可以在不阻塞主线程的情况下进行日志输出。此外,还可以通过配置来优化日志文件大小,例如设置日志文件的最大大小,当达到限制时自动滚动...

    HAP框架-Logback入门手册 .zip

    - 使用AsyncAppender实现日志记录的异步化,提高应用性能,尤其在高并发场景下。 7. **监控与管理** - Logback管理工具:如SLF4J的Logback-Manager,可以实时查看和控制日志输出。 - JMX(Java Management ...

Global site tag (gtag.js) - Google Analytics