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
相关推荐
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还提供了异步日志模式,通过 `<appender name ="ASYNCERROR" class= "ch.qos.logback.classic.AsyncAppender">` 组件来实现异步日志输出。 使用lombok logback-slf4j还可以与lombok结合使用,通过...
通过使用AsyncAppender,日志记录操作将在后台线程中执行,不会阻塞应用程序的主线程。 ### 8. 日志归档和滚动 Logback允许配置日志文件的归档策略,例如按日期、大小等条件滚动。这有助于管理日志文件的大小和...
最后,logback支持异步日志记录,通过`AsyncAppender`可以提高日志性能,避免日志输出对应用程序的性能影响。此外,还可以使用过滤器(Filter)来控制哪些日志事件会被记录,例如只记录特定级别的日志或根据日志消息...
此外,通过使用`AsyncAppender`,可以实现日志的异步记录,提高系统的整体性能,尤其是在高并发环境下。 **日志管理和监控** 在生产环境中,日志的管理变得尤为重要。`logback-demo`项目可能会展示如何利用Logback...
<appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender"> ``` 3. 文件滚动策略 Logback提供了多种文件滚动策略,例如`SizeAndTimeBasedRollingPolicy`,可以根据文件大小和时间进行...
8. **异步日志**:Logback支持异步日志记录,通过AsyncAppender可以提高日志性能,避免阻塞应用程序。 9. **日志性能**:Logback相对于其他日志框架(如Log4j)有更高的性能,因为它在设计时就考虑了效率和资源利用...
Logback 提供了异步日志记录的功能,通过 AsyncAppender 类,可以提高日志记录的性能,避免阻塞应用程序主线程。 **日志归档和大小限制** 通过 RollingFileAppender,Logback 可以自动管理日志文件的大小和数量,...
5. 异步日志处理:logback的`AsyncAppender`组件能够以非阻塞方式处理日志事件,从而避免因日志输出导致的性能瓶颈。 6. 模块化设计:logback分为核心、经典和-access三个模块,分别处理不同类型的日志需求,使得...
引入 `logback-classic` 的依赖,并在配置中使用 `AsyncAppender` 类。 6. **自定义 Appender 和 Layout**: 如果标准的 Appender 或 Layout 不满足需求,可以通过继承 Logback 类并重写相关方法来自定义自己的实现...
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"> ``` **日志回滚和大小限制** Logback提供`SizeBasedRollingPolicy`和`TimeBasedRollingPolicy`策略,可以按日志文件大小或时间...
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"> ``` 以上就是`logback-spring.xml`日志打印输出的基本概念和配置方法。在实际项目中,可以根据需求调整配置,实现定制化的日志...
通过使用`AsyncAppender`,可以将日志记录操作放在单独的线程中处理。 - 日志分级:通过`<logger>`标签可以定义特定包或类的日志级别,实现精细化控制。 - 日志路由:利用`RoutingAppender`,可以根据不同的条件将...
此外,logback还支持异步日志记录,通过`AsyncAppender`可以提高日志处理的效率,避免阻塞应用程序的主线程。同时,`Filter`元素允许我们根据特定条件过滤日志消息。 在压缩包文件`logback_slf4j_pom`中,可能包含...
1. 使用异步日志:通过 AsyncAppender 类,可以实现日志事件的异步处理,减少主线程的阻塞。 2. 配置日志级别:根据实际需求设置合适的日志级别,避免过多的无用日志输出。 3. 使用缓存:通过配置,可以利用缓存减少...
<appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender"> ``` 9. **最后的配置文件**: 完整的`logback-spring.xml`可能如下所示: ```xml ...
<appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender"> ``` ### 6. 高级特性 - **SizeBasedTriggeringPolicy**: 当日志文件大小达到预设值时,自动滚动创建新的日志文件。 - **...
Logback设计上注重性能,它采用了异步日志记录机制,通过使用`AsyncAppender`可以在不阻塞主线程的情况下进行日志输出。此外,还可以通过配置来优化日志文件大小,例如设置日志文件的最大大小,当达到限制时自动滚动...
- 使用AsyncAppender实现日志记录的异步化,提高应用性能,尤其在高并发场景下。 7. **监控与管理** - Logback管理工具:如SLF4J的Logback-Manager,可以实时查看和控制日志输出。 - JMX(Java Management ...