spring boot 使用 log4j 异步日志
操作步骤
1. 排除默认的 logback 依赖,同时引入log4j2
org.springframework.boot spring-boot-starter spring-boot-starter-logging org.springframework.boot
org.springframework.boot spring-boot-starter-log4j2
com.lmax disruptor
2. 配置全局使用log4j2 异步日志
在 resources 目录增加文件: log4j2.component.properties,内容如下:
# 设置异步日志系统属性
log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
3. 增加日志打印配置文件
在 resources 目录增加文件: log4j2.xml,内容如下:
log4j2 扩展知识
log4j2 异步日志扩展知识(优缺点)
优点
- 更高的日志打印峰值吞吐量。您的应用程序可以以6 - 68倍于同步日志记录器的速度记录消息。
- 降低日志响应时间延迟。响应时间延迟是在给定工作负载下调用Logger.log返回所需的时间。异步日志记录器的延迟始终低于同步日志记录器,甚至低于基于队列的异步appenders
缺点
- 因为异步打印日志,已经切换到 其他线程打印.所以 如果出错了,原来的业务线程感知不到,所以如果用日志做业务流程处理的,比如审计,最好采用同步日志
- 如果服务器是单核心的,那么不要采用异步日志,不能增加性能.线程切换,可能导致性能下降.
- 如果应用程序记录消息的持续速率快于底层appender的最大持续吞吐量,则队列将满,应用程序将以最慢的appender的速度记录日志。如果发生这种情况,请考虑选择一个更快的appender,或者减少日志记录。如果这两个选项都不行,那么您可以通过同步日志获得更好的吞吐量和更少的延迟峰值。
参考
https://zhuanlan.zhihu.com/p/105428561
log4j2 异步日志使用方式
1. 全部日志采用异步模式
如上次增加 log4j2.component.properties 配置异步 AsyncLoggerContextSelector, 然后 log4j2.xml 和同步的配置一样,不需要再使用 AsAsyncLogger 或 AsyncRoot。
2. 混合同步异步模式
不需要配置 AsyncLoggerContextSelector,直接在 log4j2.xml 混合 Logger 和 AsAsyncLogger。
Random Access File Appender
RollingRandomAccessFile 在异步日志使用中,性能要好与 RollingFile 。使用方式和RollingFile差不多 ,除了始终缓冲的默认缓冲区大小为256 * 1024字节(可以在启动时候指定更改,但不会动态变化了)。
参考资料
https://springframework.guru/asynchronous-logging-with-log4j-2/
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
