クラスパスやシステムプロパティをいじらずに、Log4J 2.x log4j2.xml
ファイルの場所を手動で指定する方法はありますか(Log4J 1.xのDOMConfigurator
など)。
_org.Apache.logging.log4j.core.config.Configurator
_の静的メソッド#initialize(String contextName, ClassLoader loader, String configLocation)
(source here を参照)を使用できます。 (クラスローダーにはnullを渡すことができます。)
このクラスはパブリックAPIの一部ではないため、マイナーリリースでコードが壊れる可能性があることに注意してください。
完全を期すために、このシステムプロパティを使用して構成ファイルの場所を指定することもできます。
_-Dlog4j.configurationFile=path/to/log4j2.xml
_
Windowsでは、log4j.configurationFile
プロパティでURIを使用する必要があることに注意してください。
-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
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);
以下のように初期化することもできます
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);
Log4j2を使用していて、プロパティがlog4j2.propertiesファイルで定義されている場合は、これを使用します。
-Dlog4j2.configurationFile = file:/home/atul/log4j2.properties