在 Websphere WebApp 中将 JUL 重定向到 Log4J2

Redirect JUL to Log4J2 in Websphere WebApp

我有一个运行 WebApp 的 WebSphere Application Server。我从 Eclipse 启动服务器。该应用程序中的主要日志记录框架是 log4j2,但也有一些使用 java.util.logging 的第三方库。我想将这些日志重定向到 log4j2,以便它使用我的过滤器、日志格式等。

我已经通过将 java util LogManager 设置为 log4j-jul jar 提供的工具来询问有关此主题的问题 here and . First I tried to use the approach。如第一个链接问题所示,这在我的用例中并不适用。因为该应用程序在 Websphere 服务器中作为 WebApp 运行,所以实际上并没有加载 log4j-jul jar 的时刻,我可以换出 LogManager,但在对 java 的任何调用之前util LoggerLogManager 是因为服务器在加载 jar 和配置我的 Log4J2 设置之前使用这些日志语句。

然后我尝试按照第二个链接问题中的建议使用 Log4jBridgeHandler。起初我认为这行得通,因为我的测试 java util 日志语句以我当前的 Log4j2 格式打印。

不过我确实有两个问题:我不能使用在 logging.properties 中设置处理程序和级别的方法,因为它根本没有效果(我已经将路径设置为 logging.properties 文件通过 java.util.logging.config.file 系统 属性 在 jvm.options 文件中)。

有用的是使用 Log4jBridgeHandlerinstall() 方法,因为这使得 java util 日志以我的 Log4j2 格式打印。但是我创建的 java 实用程序 Logger 没有 ALL 所需的级别,而是默认的 INFO,尽管根记录器具有正确的级别。因此,java util 日志记录功能中的默认守卫阻止进入桥接,因此我永远无法记录 INFO 级别以下的任何内容。

所以是的,我疯了。我做错了什么吗?我所做的应该有用吗?

Did I do anything wrong? Should what I've done have worked?

Log4jBridgeHandler 执行从 LOG4J2 到 JUL 的级别传播。尝试在 log4j2.xml 中添加记录器条目以设置命名记录器的级别。

在您的 logging.properties 中,您可以通过以下方式关闭此功能:

org.apache.logging.log4j.jul.Log4jBridgeHandler.propagateLevels=false