gpt4 book ai didi

java - 使用 Log4j2 2.11 的微秒级打印分辨率

转载 作者:行者123 更新时间:2023-11-30 10:07:17 25 4
gpt4 key购买 nike

我遇到了一个最奇怪的问题,即日志记录的微秒级时间分辨率在某些情况下无法正常工作,而在其他情况下却可以正常工作。

设置说明:

  • 祖鲁 JDK 11
  • Gradle 5.1.1 项目
  • Log4j2 2.11.1 依赖项。
  • Spring Boot 2.1.0.RELEASE 应用

这是 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” spring boot jar 中(通过 ./gradlew clean bootJar 然后运行它时,我只得到毫秒级别的分数一秒钟。

当然,log4j2.xml 文件已正确打包为 spring boot jar 的一部分。

我猜它在某种程度上与类路径问题有关,但看在上帝的份上,我不明白是什么导致了这种行为。

任何帮助/建议都会被告知。

最佳答案

Log4j API 和实现 jar 被打包为多版本 jar。如果您将 jar 打包到另一个没有 multi-release: true list header 的 jar 中,JDK 设计者会以他们无限的智慧忽略这一点。否则,您将无法执行 Log4j 中内置的任何 Java 9+ 支持。

底线是——将 multi-release: true header 添加到 Spring Boot 应用程序 jar list 。

关于java - 使用 Log4j2 2.11 的微秒级打印分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54390608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com