[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[备忘]log4j2开启异步日志

上一篇:[备忘]listFiles()方法返回是无序的
下一篇:[备忘]jdk7时,slf4j和log4j2的版本关系

添加日期:2024/1/31 14:37:29 快速返回   返回列表 阅读145次
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> 

 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved