Log4j JDK日志记录适配器:在启动过程中后期应用LogManager系统属性

时间:2019-04-24 14:14:17

标签: logging websphere log4j2 websphere-liberty java.util.logging

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

通常,可以在jvm.options中设置系统属性-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager。问题是我似乎无法使该解决方案正常工作,因为服务器在加载log4j2属性之前和适配器的log4j-jul jar加载之前就使用Java util日志记录。这会导致在尝试启动服务器后立即引发异常(请参阅我的other question)。

因此,我想也许可以在启动过程中稍后将LogManager设置为log4j-jul jar中的那个,当jar加载了我的log4j2属性时?

1 个答案:

答案 0 :(得分:2)

一旦加载java.util.logging.LogManager(在第174行附近),它将分配单例实例。触发加载后无法替换它。

安装org.apache.logging.log4j.jul.Log4jBridgeHandler应该可以解决问题。您应该能够使用带有WebSphere的默认LogManager将该处理程序添加到根记录器中。

通常可以通过将以下内容添加到logging.properties中来完成:

.handlers=org.apache.logging.log4j.jul.Log4jBridgeHandler
.level.INFO
org.apache.logging.log4j.jul.Log4jBridgeHandler.level=ALL

每个LOG4J2-2025在LOG4J2版本3.0.0中已修复。截至2019年4月25日,似乎是未来版本。对于LOG4J2 2.3,可以使用log4j2-Java6-extrasdownload log4j2-Java6-extras from Maven