目录Log4j2不能打印行号问题(AsyncLogger)背景解决方案注意附完整配置节点Log4j2异步日志中打印方法名和行号信息解决方案pom配置属性配置
Log4j2不能打印行号问题(AsyncLogger)
背景
%d{yyyy-MM-dd HH:mm:ss,SSS} %level [%t] %logger{36}(%F:%L) - %m%n
日志的输出格式已经指定了文件名、行号显示,可是打印出来却是空的,为什么?答案在这里:
解决方案
pom.xml
<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.3.11</version></dependency>
log4j2.xml
<AsyncLogger name="com.domain.app.web" includeLocation="true"> <AppenderRef ref="File" /></AsyncLogger>
注意 includeLocation
:设置成true,否则指定了行号也显示不出来; disruptor
:这个包需要单独引入; additivity
:设置成false,否则会重复;
附完整配置节点
<AsyncLogger name="com.domain.app.web" includeLocation="true" level="debug" additivity="false"> <AppenderRef ref="File" /></AsyncLogger>
<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配置
<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.3.6</version> </dependency>
属性配置
设置 AsyncRoot 的 includeLocation 属性为 true;
xml 格式示例:
<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot>
yaml 格式示例:
Loggers: AsyncRoot: level: info includeLocation: true AppenderRef: - ref: console - ref: running_log
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
【本文来源:韩国服务器 http://www.yidunidc.com欢迎留下您的宝贵建议】人之相识,贵在相知;人之相知,贵在知心。