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 - プログラムを終了します