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