已经连续46天没有写文章了,主要是最近忙着折腾 Spring Cloud 。后续在下会持续发布一些关于 Spring Cloud 相关的文章。今天记录一些关于 log4j2 的坑。
配置 log4j2
pom.xml 需要把自带的 logging 剔除掉,然后加上 log4j2 的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
之后就是加上 log4j2.xml ,这个应该网上找得到很多。
TraceId 的打印
在 pom.xml 文件里加上 spring-cloud-starter-sleuth
的依赖,就可以在日志里打出TraceId,标记每一次请求打出的日志。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
logback 是直接可以在日志里看到TraceId,无需多余的配置;但是 log4j2 就需要额外配置一下了;印象中是在GitHub 上翻到的答案。(有点运气性)
<PatternLayout pattern="[%d{yyy-MM-dd HH:mm:ss:SSS}] [%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}] [%p] - %l - %m%n"/>
敲黑板!!划重点!!重要的事说三遍!!
[%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}]
[%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}]
[%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}]
log4j2.xml 文件路径问题
这个首先描述清楚:是 log4j2.xml 这个文件的路径,大部分 blog 都是直接写放在resources
目录下,这很明显很痛苦。因为resources
目录打成 jar 包时会打进去,如果你在日志输出路径直接写线上的文件路径的话,运维就不开心了:“我想自己配置日志输出路径。”。同时意味着你本机调试的时候,日志可能会打到很奇怪的目录去,自己也不开心,所以配置文件可配势在必行。
一开始没找到比较好的解决方案,因为搜 log4j2 配置文件路径总是会被当做日志输出路径,而且所有介绍log4j2的都是说放在resources目录下,正确的搜索姿势是:“.xml 文件路径 log4j2”。
然后找到的第一个解决方案是:
java -Dlog4j.configurationFile=path/to/log4j2.xml -jar xxxx.jar
但是我真的失败了,可能是不匹配 log4j2 吧。
然后在 GitHub 上找到了第二个解决方案:
# application.properties 配置文件
logging.config=path/to/log4j2.xml
加上配置就可以!超简单!世界瞬间美好了很多!(虽然前三行日志还不太和谐)
结束语
路漫漫其修远兮,好好加油!