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

问题描述 投票:2回答:1

我有一个运行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属性被加载时?

logging websphere log4j2 websphere-liberty java.util.logging
1个回答
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中得到修复。截至25-APR-2019,它似乎是未来版本。对于LOG4J2 2.3,您可以使用log4j2-Java6-extrasdownload log4j2-Java6-extras from Maven

© www.soinside.com 2019 - 2024. All rights reserved.