https://zhuanlan.zhihu.com/p/36554554 https://www.cnblogs.com/wuqinglong/p/9516529.html
官方文档在这里: https://logging.apache.org/log4j/2.x/manual/async.html 注意,它这个是2.10版本
全局异步: (1)Log4j-2.9及更高版本,在类路径上需要disruptor-3.3.4.jar或更高版本
(2)增加log4j2.component.properties,写上: log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 注意上面是2.10版本的写法,旧版这样写: Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
(3)log4j2.xml里依然使用<Logger>,不要使用<AsyncLogger>。
(4)判断是否为异步日志,可以这样: log.info("是否为异步日志:{}”", AsyncLoggerContextSelector.isSelected());
(5)异步日志是批量写盘的,所以可以把RandomAccessFile的immediateFlush属性写为false。
同步日志时,immediateFlush=True则立即写盘,为False,则缓存满了才写盘,当日志稀少时,可能最后的日志一直不写盘。 异步日志时,按批量写盘,队列没数据了,自动写盘。所以immediateFlush没用了。
(6)排除log4j的jar
<exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions>
|