使用jul-to-slf4j WildFly记录未格式化的消息

时间:2015-06-19 10:38:43

标签: logging slf4j wildfly-8 jul-to-slf4j

我们的应用程序在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的库,所以它的日志只会转到stdout。为了解决这个问题,我添加了另一个依赖项:

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可以正确格式化消息?或者使用参数处理消息是否存在一些基本限制?

2 个答案:

答案 0 :(得分:2)

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

必须将其配置为继续推进JUL。

从我对源代码的阅读看起来它支持推送到slf4j ......

因此,您应该研究如何告诉Jboss登录wildfly以登录到slf4j。

答案 1 :(得分:0)

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

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