3

我们的应用程序在 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.loggingSLF4j 而不是 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才能正确格式化消息?或者在处理带有参数的消息时是否存在一些基本限制?

4

2 回答 2

2

嗯...看起来 Wildfly(肯定是 8+ 版)使用 JBoss 日志记录。据我所知,Jboss 日志记录是另一个日志记录包装器。

它必须配置为推送到 JUL。

从我对源代码的阅读来看,它似乎也支持推送到 slf4j ......

所以你应该研究如何告诉Jboss登录wildfly登录slf4j。

于 2015-06-30T12:03:19.940 回答
0

您是否考虑过使用此处所述的日志记录配置文件:https ://docs.jboss.org/author/display/WFLY8/Logging+Configuration ?

清单版本:1.0 日志记录配置文件:ejbs

于 2015-07-02T09:48:39.137 回答