java - 在 Websphere WebApp 中将 JUL 重定向到 Log4J2

标签 java logging log4j2 java.util.logging

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

我已经提出了有关此主题的问题 herehere 。首先我尝试使用 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>

有用的是使用 Log4jBridgeHandlerinstall() 方法,因为这使得 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/

相关文章:

java - CN1 : Scrolling not working on MultiButton

java - 什么在 Windows 上将命令行参数解析为 args[]?

java - Log4J 如何在 NTEventLogAppender 上设置日志文件夹(KEY)

java - log4j 可以配置为使用 Joda Time 的时区数据库吗?

java - 为什么我会出现无法调用类布局.XmlLayout 中的工厂方法?

java - Log4j2 - 找到配置,但无法正常工作

java - 在类中打开文件

java - JPA 和 hibernate - 更新/合并一对多关系

python - 从多个 celery worker 登录到一个文件安全吗?

java - log4j2 -version 2.5 - 如何使用 java.util.properties 对象配置 log4j2