我们的应用程序在 WildFly 中运行,但我们使用自定义日志记录,因此jboss-deployment-structure.xml
有以下几行:
<exclude-subsystems>
<subsystem name="logging"/>
</exclude-subsystems>
我们使用 SLF4j 和 Logback 后端,因此项目依赖项(Gradle 格式)包括:
compile 'org.slf4j:slf4j-api:1.7.12'
compile 'ch.qos.logback:logback-classic:1.1.3'
compile 'org.slf4j:jcl-over-slf4j:1.7.12'
最近我添加了另一个使用java.util.logging
SLF4j 而不是 SLF4j 的库,因此它的日志只会转到标准输出。为了解决这个问题,我添加了另一个依赖项:
compile 'org.slf4j:jul-to-slf4j:1.7.12'
并将以下两行 Java 代码添加到应用程序初始化代码中:
SLF4JBridgeHandler.removeHandlersForRootLogger ();
SLF4JBridgeHandler.install ();
现在该库也可以正常记录。
但是,出现了另一个问题:现在 WildFly 消息也写入了我们的日志(似乎它也使用了 java.util.logging)。这并没有那么糟糕(即使我们更喜欢将应用程序和 Web 服务器日志分开),但它们是非格式化的,带有未转换的占位符。例如,在jul-to-slf4j
添加 WildFly 之前会记录此消息:
[...] UT005023:对 /Main.html 的异常处理请求
但现在我看到了这个:
[...] UT005023:对 %s 的异常处理请求
我是否需要添加一些额外的配置jul-to-slf4j
才能正确格式化消息?或者在处理带有参数的消息时是否存在一些基本限制?