Log4j2介绍和特性实例(三)--日志的异步输出
来源:互联网 发布:网络测试好学吗 编辑:程序博客网 时间:2024/06/05 20:09
上一篇介绍了一个Log4j2的使用实例,本编将介绍Log4j2的一个重要特性,日志异步输出。
日志异步输出的好处在于,使用单独的进程来执行日志打印的功能,可以提高日志执行效率,减少日志功能对正常业务的影响。
异步日志在程序的classpath需要加载disruptor-3.0.0.jar或者更高的版本。
异步日志分为两种:
a.全异步模式
这种异步日志方式,不需要修改修改原理的配置文件,Logger仍然使用<root> and <logger>
只需要在主程序代码开头,加一句系统属性的代码:
System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
b.异步和非异步混合输出模式
在配置文件中Logger使用<asyncRoot> or <asyncLogger>
<loggers> <AsyncLogger name="AsyncLogger" level="trace" includeLocation="true"><appender-ref ref="Console" /><appender-ref ref="debugLog" /><appender-ref ref="errorLog" /></AsyncLogger><asyncRoot level="trace" includeLocation="true"><appender-ref ref="Console" /></asyncRoot> </loggers>
用户手册中说全异步模式的性能要高于混合异步模式,但是如果Log4j2用作审计功能(Audit)的话,建议使用混合异步模式。
在异常导致程序退出的情况,担心Log4j2异步输出无法打印错误信息,也专门做了测试。
从测试结果看,在程序异常退出前的所有日志都得到了保存。3,000,000条日志,全异步模式(All Logger Async)用了20分钟打印到日志文件,混合模式(Mixing)用了40分钟。
另外,Log4j2实现高性能的异步日志输出,主要是借助了LMAX Disruptor的开源框架,下面是Log4j2对其的描述,感兴趣的同学可以自己学习一下。
LMAX Disruptor technology. Asynchronous Loggers internally use the Disruptor, a lock-free inter-thread communication library, instead of queues, resulting in higher throughput and lower latency.下一篇将介绍日志的过滤器。
1 0
- Log4j2介绍和特性实例(三)--日志的异步输出
- Log4j2介绍和特性实例(三)--日志的异步输出
- Log4j2介绍和特性实例(三)--日志的异步输出
- Log4j2介绍和特性实例(五)--用户自定义日志等级
- Log4j2介绍和特性实例(七)--代码中指定日志文件的名字
- Log4j2介绍和特性实例(一)
- Log4j2介绍和特性实例(一)
- Log4j2介绍和特性实例(四)--过滤器Filter
- Log4j2介绍和特性实例(六)--配置文件不在默认路径下的加载
- Log4j2实现异步日志
- LOG4J2 异步日志
- LOG4J2 异步日志
- Log4j2介绍和特性实例(二)--一个实例和初学注意事项(configuration标签中的 status 和 monitorInterval)
- Log4j2介绍和特性实例(二)--一个实例和初学注意事项(configuration标签中的 status 和 monitorInterval)
- 升级log4j2.x异步日志
- log4j2 HTTP请求日志异步
- iBatis使用log4j2输出日志
- SpringBoot 配置log4j2日志输出
- 自定义collectionView,最后一行的居中
- 通过指定的URL抓取网页内容
- bzoj1207 [HNOI2004]打鼹鼠
- 什么是POD?
- 利其器-Android studio界面
- Log4j2介绍和特性实例(三)--日志的异步输出
- Arduino - 中断的使用
- SQL语句,数据更新,数据插入删除修改和对视图的更新操作
- Python爬虫初步
- [leetcode] 66. Plus One 解题报告
- php使用odbc执行复杂函数遇到的问题,sql语句直接在sqlserver数据库中运行有结果,使用php总是为空
- 三种方法实现js跨域访问
- 黑马程序员——面向对象
- DS8880要将双控高端存储架构进行到底