为什么使用org.apache.juli.ClassLoaderLogManager日志记录管理器会影响我们的jul-slf4j网桥?

时间:2019-07-10 17:35:47

标签: java tomcat logback slf4j jul-to-slf4j

我们有一个使用JUL的第三方专有库。我们使用logback和slf4j,以及jul-slf4j-bridge和 LevelChangePropagator

在大多数情况下,此功能可以正常运行。但是,当我们部署到Tomcat时(或更具体地说,当将日志记录管理器更改为 org.apache.juli.ClassLoaderLogManager时),传播会出现问题。传播似乎可行,我们通过JMX以及调试进行了验证。如果我们通过登录将第三方记录器“ foo”设置为TRACE,则会看到

java.util.loggging.LoggingMXBean.getLoggerLevel("foo")

将按照我们的预期返回FINEST。

问题在于库中有如下几行:

logger.isLoggable(Level.FINEST)

,即使我们已经验证了传播,它也会返回false。当我们调试时,此处的记录器确实具有800的级别值(对于FINEST,它的值为300)。好像有两个为“ foo”创建的记录器,在一种情况下(JMX),我们可以访问一个,在另一种情况下(在库中),我们可以访问另一个。

org.apache.juli.ClassLoaderLogManager日志管理器为什么/如何影响我们的案子,我们如何解决或了解正在发生的事情?它与存在的不同类加载器有关吗?

  • 该问题仅发生在org.apache.juli.ClassLoaderLogManager日志管理器中。我们可以在Tomcat上禁用它,它可以按预期工作。 FINEST日志是通过slf4j记录的,但我们想确切了解正在发生的事情,而不仅仅是更改Tomcat配置。
  • 即使出现问题,在其他情况下,jul-slf4j-bridge也可以按我们预期的方式工作,例如,记录器“ foo”的INFO级别通过slf4j进行记录。

0 个答案:

没有答案