Log4jで複数Javaアプリから同一ログファイルに書き込むことができるか?
業務で同一ファイルに対して複数のバッチプログラムからメッセージを出力する要件が出そうなので、実験してみた。
以下のサンプルコードで、無事に複数Javaアプリからファイルへの書き込みができた。
サンプルコード
import org.apache.log4j.Logger;
public class LogClient {
public static final Logger logger = Logger.getLogger(LogClient.class);
private String name;
public static void main(String[] args) {
String name = args[0];
LogClient client = new LogClient(name);
client.execute();
}
public LogClient(String name) {
this.name = name;
}
public void execute() {
logger.info("プログラムを開始します");
for (int i = 0; i < 20; i++) {
logger.info(String.format("<%s> 値=%d", name, i));
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
logger.info("プログラムを終了します");
}
}
起動用バッチファイル
@set BASE=. @set CLASSPATH=.\bin @set CLASSPATH=%CLASSPATH%;.\lib\log4j-1.2.13.jar java LogClient %1
ログ出力結果
2010-03-16 09:23:49,812 INFO [main] LogClient - プログラムを開始します 2010-03-16 09:23:49,812 INFO [main] LogClient -値=0 2010-03-16 09:23:50,312 INFO [main] LogClient - 値=1 2010-03-16 09:23:50,812 INFO [main] LogClient - 値=2 2010-03-16 09:23:51,062 INFO [main] LogClient - プログラムを開始します 2010-03-16 09:23:51,062 INFO [main] LogClient - 値=0 2010-03-16 09:23:51,312 INFO [main] LogClient - 値=3 2010-03-16 09:23:51,562 INFO [main] LogClient - 値=1 2010-03-16 09:23:51,812 INFO [main] LogClient - 値=4 2010-03-16 09:23:52,062 INFO [main] LogClient - 値=2 2010-03-16 09:23:52,312 INFO [main] LogClient - 値=5 2010-03-16 09:23:52,562 INFO [main] LogClient - 値=3 2010-03-16 09:23:52,812 INFO [main] LogClient - 値=6 2010-03-16 09:23:53,062 INFO [main] LogClient - 値=4 2010-03-16 09:23:53,312 INFO [main] LogClient - 値=7 2010-03-16 09:23:53,562 INFO [main] LogClient - 値=5 2010-03-16 09:23:53,812 INFO [main] LogClient - 値=8 2010-03-16 09:23:54,062 INFO [main] LogClient - 値=6 2010-03-16 09:23:54,312 INFO [main] LogClient - 値=9 2010-03-16 09:23:54,562 INFO [main] LogClient - 値=7 2010-03-16 09:23:54,812 INFO [main] LogClient - 値=10 2010-03-16 09:23:55,062 INFO [main] LogClient - 値=8 2010-03-16 09:23:55,312 INFO [main] LogClient - 値=11 2010-03-16 09:23:55,562 INFO [main] LogClient - 値=9 2010-03-16 09:23:55,812 INFO [main] LogClient - 値=12 2010-03-16 09:23:56,062 INFO [main] LogClient - 値=10 2010-03-16 09:23:56,312 INFO [main] LogClient - 値=13 2010-03-16 09:23:56,562 INFO [main] LogClient - 値=11 2010-03-16 09:23:56,812 INFO [main] LogClient - 値=14 2010-03-16 09:23:57,062 INFO [main] LogClient - 値=12 2010-03-16 09:23:57,312 INFO [main] LogClient - 値=15 2010-03-16 09:23:57,562 INFO [main] LogClient - 値=13 2010-03-16 09:23:57,828 INFO [main] LogClient - 値=16 2010-03-16 09:23:58,062 INFO [main] LogClient - 値=14 2010-03-16 09:23:58,328 INFO [main] LogClient - 値=17 2010-03-16 09:23:58,562 INFO [main] LogClient - 値=15 2010-03-16 09:23:58,828 INFO [main] LogClient - 値=18 2010-03-16 09:23:59,062 INFO [main] LogClient - 値=16 2010-03-16 09:23:59,328 INFO [main] LogClient - 値=19 2010-03-16 09:23:59,562 INFO [main] LogClient - 値=17 2010-03-16 09:23:59,828 INFO [main] LogClient - プログラムを終了します 2010-03-16 09:24:00,062 INFO [main] LogClient - 値=18 2010-03-16 09:24:00,562 INFO [main] LogClient - 値=19 2010-03-16 09:24:01,062 INFO [main] LogClient - プログラムを終了します