我有一个运行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属性时?
答案 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-extras或download log4j2-Java6-extras from Maven。