web-dev-qa-db-ja.com

Log4J 2.x構成の場所を指定する方法

クラスパスやシステムプロパティをいじらずに、Log4J 2.x log4j2.xmlファイルの場所を手動で指定する方法はありますか(Log4J 1.xのDOMConfiguratorなど)。

18
Andrei Petrenko

_org.Apache.logging.log4j.core.config.Configurator_の静的メソッド#initialize(String contextName, ClassLoader loader, String configLocation)(source here を参照)を使用できます。 (クラスローダーにはnullを渡すことができます。)

このクラスはパブリックAPIの一部ではないため、マイナーリリースでコードが壊れる可能性があることに注意してください

完全を期すために、このシステムプロパティを使用して構成ファイルの場所を指定することもできます。

_-Dlog4j.configurationFile=path/to/log4j2.xml
_
19
Remko Popma

Windowsでは、log4j.configurationFileプロパティでURIを使用する必要があることに注意してください。

-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
2
Glenn McElhoe

LoggerContextを使用すると、 setConfigLocation が可能になります。

File f = new File(this.logConfigFile);
URI fc = f.toURI();         
System.out.println("Loading logging config file: " + fc);
Logger l = (Logger) LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
l.getContext().setConfigLocation(fc);

または代わりに

LoggerContext.getContext().setConfigLocation(Java.net.URI);
1
Luigi

以下のように初期化することもできます

ConfigurationSource source = new ConfigurationSource(new FileInputStream(log4j file Path));
XmlConfiguration xmlConfig = new XmlConfiguration(source);
Logger logger = (Logger) LogManager.getLogger(); 
logger.getContext().start(xmlConfig); 

各クラスでは、以下のようにロガーインスタンスを取得できます

import org.Apache.logging.log4j.LogManager;
import org.Apache.logging.log4j.Logger;

private final Logger logger = LogManager.getLogger(ABC.class);
1
KalyanM

Log4j2を使用していて、プロパティがlog4j2.propertiesファイルで定義されている場合は、これを使用します。

-Dlog4j2.configurationFile = file:/home/atul/log4j2.properties

0
Atul