我有一个最奇怪的问题,即在某些情况下,微秒级的日志记录时间分辨率无法正常工作,而在其他情况下却可以正常工作。
设置说明:
这是Log4j2 XML配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR" shutdownHook="disable">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{yyyy-MM-dd'T'HH:mm:ss,nnnnnn} [%t] %level{length=5} %c{1} -%equals{ |%marker|}{ ||}{} %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
通过./gradlew clean bootRun
手动运行此设置时,我得到了完美的 us 分辨率。
但是,当我将文件打包到“ fat” 弹簧启动jar中(通过./gradlew clean bootJar
然后运行它时,我得到的毫秒级分数仅为秒)。
当然,log4j2.xml文件已作为Spring Boot jar的一部分正确打包。
我猜想这与类路径问题有关,但是出于对上帝的爱,我无法理解是什么导致了这种行为。
任何帮助/建议都将得到很多建议。
答案 0 :(得分:1)
Log4j API和实现jar打包为多版本jar。用他们的无限智慧,JDK设计人员会忽略如果将jar打包在另一个没有multi-release:true清单标头的jar中。否则,您将不会执行Log4j内置的任何Java 9+支持。
最重要的是-将Multi-release:true标头添加到Spring Boot应用程序jar清单中。
答案 1 :(得分:0)
答案 2 :(得分:0)
更新:即使@rgoers从技术上来说是正确的,但在清单中添加多释放标志并不能解决问题。原来这是Spring Boot 2工作中的问题,现在已通过Spring Boot 2.1.2解决(甚至在2.1.1上也可以解决)。
现在,记录无需更改清单即可正常运行。
其他信息可以在这里找到-https://github.com/spring-projects/spring-boot/issues/12523