log4j2-spring.xml日志Pattern配置:异步Appender无法输出类、方法及行号
Log4j2异步Appender无法输出类名、方法名及行号的解决方案
你的问题出在Async Appender默认不会保留日志事件的位置信息,而%class、%M、%L这些Pattern依赖原始调用线程的栈轨迹来获取类名、方法和行号。异步日志在后台线程处理时,原始上下文的栈信息会丢失,导致这些字段无法正常输出。
解决步骤
修改Async Appender的配置,添加includeLocation="true"属性,让异步日志保存原始的位置上下文:
<Async name="Async" includeLocation="true"> <AppenderRef ref="FileAppender" /> </Async>
原理说明
includeLocation属性默认值为false,此时Async Appender不会捕获日志事件的位置信息(类、方法、行号),以此提升异步日志的性能。- 设置为
true后,Async Appender会在捕获日志事件时保存原始的栈轨迹信息,后续的PatternLayout就能正确解析%class、%M、%L这些占位符。
注意事项
开启includeLocation="true"会带来一定的性能损耗,因为需要额外捕获和存储栈轨迹数据。如果你的系统对日志性能要求极高,需要在日志完整性和性能之间做权衡。
内容的提问来源于stack exchange,提问作者Piyush Srivastava
相关产品推荐
相关产品推荐

