我有一个运行 Web 应用程序的 WebSphere 应用程序服务器。我从 Eclipse 启动服务器。该应用程序中的主要日志记录框架是 log4j2,但也有一些使用 java.util.logging 的第三方库。我想将这些日志重定向到 log4j2,以便它使用我的过滤器、日志格式等。
我已经提出了有关此主题的问题 here和 here 。首先我尝试使用 approach apache 通过将 java util LogManager
设置为 log4j-jul jar 提供的建议来建议。正如第一个链接问题所示,这在我的用例中实际上不起作用。因为应用程序在 Websphere Server 中作为 WebApp 运行,所以实际上没有加载 log4j-jul jar 的时刻,并且我可以换出 LogManager
,但在对 java util 的任何调用之前之所以创建 Logger 或 LogManager 是因为服务器在加载 jar 并配置我的 Log4J2 设置之前使用这些日志语句。
然后,我尝试按照第二个链接问题中的建议使用Log4jBridgeHandler
。起初我认为这可行,因为我的测试 java util Log 语句是用我当前的 Log4j2 格式打印的。
不过,这种方法确实有两个问题:我无法使用在 logging.properties
中设置处理程序和级别的方式,因为它根本没有效果(我已经设置了路径通过 jvm.options
文件中的 java.util.logging.config.file
系统属性添加到 logging.properties
文件)。 p>
有用的是使用 Log4jBridgeHandler
的 install()
方法,因为这使得 java util 日志以我的 Log4j2 格式打印。但是我创建的 java util 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
关于java - 在 Websphere WebApp 中将 JUL 重定向到 Log4J2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852916/