我们有一个使用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配置。