app开发者平台在数字化时代的重要性与发展趋势解析
766
2022-11-13
详谈异步log4j2中的location信息打印问题
目录异步log4j2的location信息打印问题说下解决1、全异步同步异步混合log4j2支持异步打印提高打印输出速度pom依赖添加全局模式2两种局部模式 AsyncLogger
异步log4j2的location信息打印问题
背景:项目改造过程中将log4j2改成异步,发现行号没有打印,于是扒了下官方文档,大概陈述下:
先说一下这个问题是怎么解决的,然后稍微扩展一下其他配置,有兴趣的可以往下看或者溜一遍官方文档
说下解决
在
扩展:
1、additivity:这个属性的意思是需不需要打印此logger继承的父logger,如果是false则只打印当前logger;如果是true则继续打印上一层的logger,直到root。
2、实现error日志打印双份:info.log中打印一份(即info中包括info和error日志),error.log中打印一份(只包括error日志),这样的好处是能根据error日志出现的上下文快速定位到程序bug出现的位置,这个功能需要使用过滤器实现,比如:
filePattern="/history/error-%d{yyyy-MM-dd}.log.gz">
filePattern="/history/error-%d{yyyy-MM-dd}.log.gz">
log4j2的异步形式大概分为两种:全异步和同步异步混合。
1、全异步
实现方式:将系统属性log4j2.contextSelector设置 为org.apache.logging.log4j.core.async.AsyncLoggerContextSelector,即
System.setProperty("log4j2.contextSelector, "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
或者在启动时设置:
-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
官方给出了一个不需要location信息的配置文件示例:
注意:
如果用AsyncLoggerContextSelector实现全异步,那么配置中就要使用
同步异步混合
相比起全异步,混合异步可能会花费更多的性能,
官方给出了一个混合异步的配置例子:
immediateFlush="false" append="false"> http://
immediateFlush="false" append="false">
http://
对于location信息:
默认情况下,异步日志记录器不会将location信息传递给I/O线程,如果你的layouts或custom过滤器需要location信息,你需要在所有相关日志记录器(包括根日志记录器)的配置中设置“includeLocation=true”
如果其中一个layouts配置了关于位置的信息,比如HTML locationInfo,或者表达式%C或%class、%F或%file、%l或%location、%L或%line、%M或%method,log4j2将会获取堆栈的快照(snapshot),并遍历堆栈跟踪以查找位置信息,因此会消耗较多的时间。
比同步logger慢1.3到5倍,同步日志记录器在获取堆栈快照之前会等待尽可能长的时间,如果不需要位置,那么快照将永远不会被捕获。
了解更多请访问官方文档:Apache Log4j2 Async 官方文档
log4j2支持异步打印提高打印输出速度
pom依赖添加
全局模式2两种
第一种:resources 下创建属性文件 log4j2.component.properties
# log4j2异步支持
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
第二种:springboot启动main方法添加代码
System.setProperty("Log4jContextSelector","org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
或者采用启动参数
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
局部模式 AsyncLogger
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~