我是靠谱客的博主 慈祥蜗牛,这篇文章主要介绍处理Log4j2不能打印行号的问题(AsyncLogger),现在分享给大家,希望可以做个参考。

Log4j2不能打印行号问题(AsyncLogger)

背景

复制代码
1
%d{yyyy-MM-dd HH:mm:ss,SSS} %level [%t] %logger{36}(%F:%L) - %m%n

日志的输出格式已经指定了文件名、行号显示,可是打印出来却是空的,为什么?答案在这里:

解决方案

pom.xml

复制代码
1
2
3
4
5
<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.3.11</version> </dependency>

log4j2.xml

复制代码
1
2
3
<AsyncLogger name="com.domain.app.web" includeLocation="true"> <AppenderRef ref="File" /> </AsyncLogger>

注意

  • includeLocation:设置成true,否则指定了行号也显示不出来;
  • disruptor:这个包需要单独引入;
  • additivity:设置成false,否则会重复;

附完整配置节点

复制代码
1
2
3
<AsyncLogger name="com.domain.app.web" includeLocation="true" level="debug" additivity="false"> <AppenderRef ref="File" /> </AsyncLogger>
复制代码
1
2
3
4
5
<appender name="STD" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%date{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) [%boldYellow(%thread)] %boldGreen(%logger)(%F:%L): %msg%n</pattern> </encoder> </appender>

Log4j2异步日志中打印方法名和行号信息

解决方案

异步logger,还需要在pom.xml中添加disruptor的依赖;

includeLocation结合异步logger使用,当其设置为true时,才会显示具体的行号,以及日志所在的类名;

如果设置为false,哪怕<Pattern>设置了输出行号也不会显示出来;

pom配置

复制代码
1
2
3
4
5
<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.3.6</version> </dependency>

属性配置

设置 AsyncRoot 的 includeLocation 属性为 true;

xml 格式示例:

复制代码
1
2
3
<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/> </AsyncRoot>

yaml 格式示例:

复制代码
1
2
3
4
5
6
7
Loggers: AsyncRoot: level: info includeLocation: true AppenderRef: - ref: console - ref: running_log

以上为个人经验,希望能给大家一个参考,也希望大家多多支持靠谱客。

最后

以上就是慈祥蜗牛最近收集整理的关于处理Log4j2不能打印行号的问题(AsyncLogger)的全部内容,更多相关处理Log4j2不能打印行号内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(147)

评论列表共有 0 条评论

立即
投稿
返回
顶部