gpt4 book ai didi

java - log4j2:为异步日志记录设置 Log4jContextSelector 系统属性的位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:31 25 4
gpt4 key购买 nike

我正在尝试在当前在 liberty 配置文件服务器中运行的 REST Web 方法中设置异步日志记录(出于性能原因)。

为此,我设置了以下属性:

System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");

我的问题是,无论我在哪里执行此操作,有时它都能正常工作并且日志记录速度非常快,但有时却不行。

我已经尝试 (a) 在包含所有 REST Web 方法的类的构造函数中(b) 在 REST 方法之前调用的过滤器 doFilter 方法中(c) 在过滤器初始化方法中(d) 在 REST 方法本身中

这些位置都无法始终如一地工作。

谁能为这种行为提供解释,如果可能的话,提供解决问题的建议方法。

编辑:看起来 log4j 在调用 setProperty 之前被初始化。所以我需要做的是通过 liberty profile 设置属性。

最佳答案

有一种未记录的方法可以为您的项目设置此值,而无需在启动期间手动传递系统属性值。

将名为 log4j2.component.properties 的文件添加到您的类路径中。这可以在大多数 maven 或 gradle 项目中通过将其保存在 src/main/resources 中来完成。

这个文件就是 java.util.Properties 文件。通过将以下行添加到文件来设置上下文选择器的值。

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

Log4j 将首先尝试读取系统属性。如果系统属性为 null,则默认情况下它将回退到存储在该文件中的值。

执行此设置的代码位于 Log4jContextFactory.java:91 .

File Location

关于java - log4j2:为异步日志记录设置 Log4jContextSelector 系统属性的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27154558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com