【问题标题】:Redirect JUL to Log4J2 in Websphere WebApp在 Websphere WebApp 中将 JUL 重定向到 Log4J2
【发布时间】:2019-04-25 15:32:52
【问题描述】:

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

我已经就这个话题herehere 提出了问题。首先,我尝试使用 apache 建议的 approach,方法是将 java util LogManager 设置为 log4j-jul jar 提供的那个。如第一个链接问题所示,这在我的用例中并不适用。因为应用程序在 Websphere Server 中作为 WebApp 运行,所以实际上并没有加载 log4j-jul jar 的时刻,我可以换掉 LogManager,但在调用 java util Logger 或 @ 之前生成 987654327@ 是因为服务器在加载 jar 并配置我的 Log4J2 设置之前使用了这些日志语句。

然后我尝试按照第二个链接问题中的建议使用Log4jBridgeHandler。起初我认为这很有效,因为我的测试 java util Log 语句以我当前的 Log4j2 格式打印。

这种方法确实有两个问题:我不能使用在logging.properties 中设置处理程序和级别的方式,因为它根本没有效果(我已经通过设置logging.properties 文件的路径jvm.options 文件中的 java.util.logging.config.file 系统属性)。

使用Log4jBridgeHandlerinstall() 方法有帮助,因为这使得java util 日志以我的Log4j2 格式打印。但是我创建的 java util Logger 没有ALL 所需的级别,而是默认的INFO,尽管根记录器具有正确的级别。因此,java util 日志记录函数中的默认守卫阻止进入桥接,因此我永远无法记录低于INFO 级别的任何内容。

所以是的,我没有主意。我做错什么了吗?我所做的应该有效吗?

【问题讨论】:

    标签: java logging log4j2 java.util.logging


    【解决方案1】:

    我做错了吗?我所做的应该有效吗?

    Log4jBridgeHandler 执行从 LOG4J2 到 JUL 的级别传播。尝试在 log4j2.xml 中添加记录器条目以设置命名记录器的级别。

    在您的 logging.properties 中,您可以通过以下方式关闭它:

    org.apache.logging.log4j.jul.Log4jBridgeHandler.propagateLevels=false
    

    【讨论】:

    • 我为我的 log4j2 日志记录使用自定义过滤器。我想这就是为什么结果不如预期的原因。该类的基本日志级别确实设置为信息,但自定义过滤器应该记录所有内容。
    • Log4jBridgeHandler.install 将布尔值作为第一个参数,用于设置关卡传播是否处于活动状态。我已经将它设置为 true,现在将其更改为 false,这解决了我的问题,感谢您的信息!
    猜你喜欢
    • 2020-04-23
    • 2011-08-26
    • 2015-09-02
    • 2014-03-26
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多