Has*_*imR 33 java logging log4j2
我想从我的应用程序以编程方式加载Log4j2 XML配置文件.
试过这个:
ConfigurationSource source = new ConfigurationSource();
source.setLocation(logConfigurationFile);
Configurator.initialize(null, source);
Run Code Online (Sandbox Code Playgroud)
还有这个:
ConfigurationSource source = new ConfigurationSource();
source.setLocation(logConfigurationFile);
ConfigurationFactory factory = (ConfigurationFactory) XMLConfigurationFactory.getInstance().getConfiguration(source);
ConfigurationFactory.setConfigurationFactory(factory);
Run Code Online (Sandbox Code Playgroud)
但是没有任何效果.
小智 38
对于最新版本的log4j,这里应该用于加载外部log4j2.xml:
String log4jConfigFile = System.getProperty("user.dir") + File.separator + "log4j2.xml";
ConfigurationSource source = new ConfigurationSource(new FileInputStream(log4jConfigFile));
Configurator.initialize(null, source);
Run Code Online (Sandbox Code Playgroud)
dco*_*led 18
如果您有一个主要入口点,此代码段可能会为您省去一些麻烦.必须在创建任何记录器之前触发set属性调用.此方法适用于类路径上的文件.
public class TestProcess {
static {
System.setProperty("log4j.configurationFile", "log4j-alternate.xml");
}
private static final Logger log = LoggerFactory.getLogger(TestProcess.class);
}
Run Code Online (Sandbox Code Playgroud)
Has*_*imR 16
我自己找到了答案.有人可能觉得它很有用.
ConfigurationSource source = new ConfigurationSource();
source.setLocation(logConfigurationFile);
source.setFile(new File(logConfigurationFile));
source.setInputStream(new FileInputStream(logConfigurationFile));
Configurator.initialize(null, source);
Run Code Online (Sandbox Code Playgroud)
下面为我工作,带SLF4J包装的Log4j2 :
public class MyClass {
static {
try {
InputStream inputStream = new FileInputStream("C:/path/to/log4j2.xml");
ConfigurationSource source = new ConfigurationSource(inputStream);
Configurator.initialize(null, source);
} catch (Exception ex) {
// Handle here
}
}
private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class); // LogManager if not using SLF4J
public void doSomething() {
LOGGER.info(...)
}
}
Run Code Online (Sandbox Code Playgroud)
static {
File log4j2File = new File("C:/path/to/log4j2.xml");
System.setProperty("log4j2.configurationFile", log4j2File.toURI().toString());
}
Run Code Online (Sandbox Code Playgroud)
需要toURI()遵循File URI Scheme格式,否则会抛出异常MalformedURLException。
资料来源: