ログの出力先やファイル名は設定ファイルに記述するが、それらを動的に変更したい場合はプレースホルダを使用する。
log4j設定ファイルは${}形式でプレースホルダが利用できる。置換文字列はシステムプロパティに設定するか、起動オプションでの指定も可能(例:-Dtoday=/20160101)。
出力先のディレクトリ名が日付になっている場合などに便利。
以下サンプル。
<appender name="file" class="org.apache.log4j.FileAppender">
<param name="File" value=".${today}/sample.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
コード
package test;
import java.net.URL;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class Sample {
private static Logger logger = Logger.getLogger(Sample.class);
public static void main(String[] args){
System.setProperty("today", "/20160101");
URL url = Thread.currentThread().getContextClassLoader().getResource("test/mylog4j.xml");
DOMConfigurator.configure(url);
logger.debug("sampleのログ");
}
}
上記サンプルの場合、${today}は"/20160101"に置換されるため、"./20160101/sample.log"に出力される。