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

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

我们的应用程序在 WildFly 中运行,但我们使用自定义日志记录,因此在 jboss-deployment-struct.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)。这并没有那么糟糕(即使我们更喜欢将应用程序和网络服务器日志分开),但它们是非格式化的,带有未转换的占位符。例如。在 jul-to-slf4j 添加之前 WildFly 会记录此消息:

[...] UT005023: Exception handling request to /Main.html

但现在我看到了这个:

[...] UT005023: Exception handling request to %s

我是否需要添加一些额外的配置,以便 jul-to-slf4j 能够正确格式化消息?或者处理带有参数的消息是否存在一些基本限制?

最佳答案

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

必须将其配置为推送到 JUL。

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

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

关于logging - 使用 jul-to-slf4j WildFly 记录未格式化的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936081/

相关文章:

android - SLF4J Android 1.7.+ 未登录 Logcat

java - 使用 maven 使用 log4j 构建项目

jboss - Wildfly:如何在 IO 子系统中动态配置工作线程

redis - 连接 Spring Session 和 Redis 时无法创建 springSessionRepositoryFilter

jboss - 应用程序遇到重定向循环错误 WildFly8

java - Lombok 可以排除该值但仍然打印字段名称吗?

java - Logback 模式相当于 log4j %l

Bash:在同一行记录时间和命令输出

jakarta-ee - JPA 实体静态记录器

java - 如何不显示来自 3rd 方 jar 的标准输出并仅显示 slf4j 日志