我有一个运行WebApp的WebSphere Application Server。我从Eclipse启动Server。该应用程序中的主要日志框架是log4j2,但是有一些第三方库使用java.util.logging。我想将这些日志重定向到log4j2,因此它使用我的过滤器,日志格式等。为了实现这一点,我可以使用Log4j JDK Logging Adapter。
通常可以设置系统属性-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
,例如在jvm.options中。问题是我似乎无法使该解决方案工作,因为服务器在加载log4j2属性之前和加载适配器的log4j-jul
jar之前很久就使用了java util日志记录。这会导致在尝试启动服务器后立即抛出异常(请参阅我的other question)。
所以我想也许有可能在启动过程中将LogManager
设置为log4j-jul
jar中的那个,当jar和我的log4j2属性被加载时?
一旦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中得到修复。截至25-APR-2019,它似乎是未来版本。对于LOG4J2 2.3,您可以使用log4j2-Java6-extras或download log4j2-Java6-extras from Maven。