如何指定Log4J 2.x配置位置?

And*_*nko 16 java configuration logging log4j log4j2

有没有办法log4j2.xml手动指定Log4J 2.x 文件位置(如DOMConfigurator在Log4J 1.x中),而不会弄乱类路径和系统属性?

Rem*_*pma 19

您可以使用静态方法#initialize(String contextName, ClassLoader loader, String configLocation)(请参阅此处的源代码)org.apache.logging.log4j.core.config.Configurator.(您可以为类加载器传递null.)

请注意,此类不是公共API的一部分,因此您的代码可能会破坏任何次要版本.

为了完整性,您还可以使用此系统属性指定配置文件的位置:

-Dlog4j.configurationFile=path/to/log4j2.xml
Run Code Online (Sandbox Code Playgroud)

  • 我在哪里调用我的项目中的 ```Configurator.initialize() ```?我问它是因为我在一个静态块中执行它并且 Log4j 正在记录它在我的代码运行之前没有找到该文件。 (2认同)

小智 10

对于 log4j 版本 2.12.1,您可以在此处找到如何重新配置​​ log4j2 。

下面是一个例子

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;

File file = new File("C:\\Path for Windows OS\\yourConfig.xml");
    
LoggerContext context = (LoggerContext) LogManager.getContext(false);
context.setConfigLocation(file.toURI());
    
Logger log  = LogManager.getLogger(YourClass.class);
Run Code Online (Sandbox Code Playgroud)

在我看来,配置 log4j2 的方式随着新版本的发布而改变,所以你应该意识到这一点。


小智 9

如果您使用的是 log4j2 并且属性在 log4j2.properties 文件中定义,则使用此文件。

-Dlog4j2.configurationFile=文件:/home/atul/log4j2.properties


Gle*_*hoe 7

在 Windows 中,请注意您需要将 URI 与log4j.configurationFile属性一起使用

-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
Run Code Online (Sandbox Code Playgroud)