spring boot 使用 log4j 异步日志

操作步骤

1. 排除默认的 logback 依赖,同时引入log4j2


org.springframework.bootspring-boot-starterspring-boot-starter-loggingorg.springframework.boot


org.springframework.bootspring-boot-starter-log4j2

com.lmaxdisruptor

2. 配置全局使用log4j2 异步日志

在 resources 目录增加文件: log4j2.component.properties,内容如下:

# 设置异步日志系统属性
log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

3. 增加日志打印配置文件

在 resources 目录增加文件: log4j2.xml,内容如下:


log4j2 扩展知识

log4j2 异步日志扩展知识(优缺点)

优点

  1. 更高的日志打印峰值吞吐量。您的应用程序可以以6 - 68倍于同步日志记录器的速度记录消息。
  2. 降低日志响应时间延迟。响应时间延迟是在给定工作负载下调用Logger.log返回所需的时间。异步日志记录器的延迟始终低于同步日志记录器,甚至低于基于队列的异步appenders

缺点

  1. 因为异步打印日志,已经切换到 其他线程打印.所以 如果出错了,原来的业务线程感知不到,所以如果用日志做业务流程处理的,比如审计,最好采用同步日志
  2. 如果服务器是单核心的,那么不要采用异步日志,不能增加性能.线程切换,可能导致性能下降.
  3. 如果应用程序记录消息的持续速率快于底层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/


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部