使用 log4j2 作为日志记录提供程序无法使用 fast-jar

时间:2021-04-26 08:00:28

标签: log4j2 quarkus

环境:

  1. quarkus 1.13.2-Final
  2. 包类型:fast-jar

我想使用 log4j2 作为日志记录提供程序来使用 delete files on rollover 的功能(我没有找到如何在 quarkus 中使用 jboss-logging 来做到这一点)。

阅读jboss-logging的文档后,将系统属性设置为

-Dorg.jboss.logging.provider=log4j2 -Dlog4j.configurationFile=config/log4j2.xml

并在我的 build.gradle 中添加了所有必要的 log4j2 依赖项(api、core 和相关桥接),所有使用 log4j2 api 和 slf4j 的日志都路由到 log4j2.xml 文件中配置的日志文件。但是每个使用 jboss-logging(quarkus 基础设施等)的日志都不会被记录。经过一些调查和调试,我发现在使用 fast-jar 包运行应用程序时,log4j2 api 不在类路径中,并且日志记录提供程序发现 (org.jboss.logging.LoggerProviders) 假定 log4j2 未正确配置(尽管系统属性)并继续使用 jboss 日志记录解决方案(因为它是类路径中唯一的日志记录提供程序)。

我的猜测是,当日志框架试图找出要使用的日志提供程序时,只会加载引导文件夹中的 jar。在这种情况下,只有 jboss-logging 可用,因为主文件夹中的 log4j2 api。

build/packaging/project/lib/boot/io.quarkus.quarkus-bootstrap-runner-1.13.2.final.jar
build/packaging/project/lib/boot/io.smallrye.common.smallrye-common-io-1.5.0.jar
build/packaging/project/lib/boot/io.quarkus.quarkus-development-mode-spi-1.13.2.final.jar
build/packaging/project/lib/boot/org.graalvm.sdk.graal-sdk-21.0.0.jar
build/packaging/project/lib/boot/org.jboss.logging.jboss-logging-3.4.1.final.jar
build/packaging/project/lib/boot/org.jboss.logmanager.jboss-logmanager-embedded-1.0.9.jar
build/packaging/project/lib/boot/org.wildfly.common.wildfly-common-1.5.4.final-format-001.jar

当我切换到 legacy-jar 包(没有尝试 uber jar)时,一切正常,因为日志记录提供程序找到 log4j2 实现并使用它而不是 jboss-logging。

我的问题是:我是否遗漏了什么或使用其他使用 fast-jar 部署的日志记录提供程序将永远无法工作?

0 个答案:

没有答案