重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

バッチプログラムを作成中なのですが、ログの出し方で悩んでいます。
ログファイルを「バッチID」と「処理日付」の組み合わせで動的に変更したいと思っています。
また、ログは各クラスで出力したいと思っています。
悩んでいる箇所は
・どのようにしてバッチIDを動的に取得してログファイル名として設定するか
・複数のパッケージのクラスを使用するバッチの一連の処理をどのようにして一つのログファイルに出力するか
の2点あり、対応方法が検討もつかない状態です。

使用しているライブラリはlog4j 1.2.16.jarです。

アドバイスをいただけないでしょうか。
よろしくお願いいたします。


例として、下記のようなバッチを考えています。
foo.bar.mainパッケージにはpublic static void main(String[] args)のメソッドをもつクラスを配置します。
foo.bar.commonパッケージにはfoo.bar.mainに配置したクラスから共通で利用する処理を実装したクラスを配置します。

foo.bar.main
+- Batch1.class
+- Batch2.class




foo.bar.common
+- Common1.class
+- Common2.class
+- Common3.class




処理の流れで言うと、
Batch1を実行する場合
1. javaコマンドでBatch1実行、Batch1クラスでログを出力
2. Batch1からCommon1クラスのメソッドを実行、Common1クラスでログを出力
3. Batch1からCommon2クラスのメソッドを実行、Common2クラスでログを出力
4. 処理終了
ログは「Batch1_20120612.log」に全て出力される。

Batch2を実行する場合
1. javaコマンドでBatch2実行、Batch2クラスでログを出力
2. Batch2からCommon1クラスのメソッドを実行、Common1クラスでログを出力
3. Batch2からCommon3クラスのメソッドを実行、Common3クラスでログを出力
4. 処理終了
ログは「Batch2_20120612.log」に全て出力される。

A 回答 (2件)

Batch1と、Batch2の呼び出すバッチファイルが別ならば、それぞれのlog4j.properties を作成して -Dlog4j.configuration オプションで起動してあげればいいです。


同じバッチからの呼び出しなら、専用のAppendarを作るしかないですね。
    • good
    • 0
この回答へのお礼

今回は-Dlog4j.configuration オプションで対応したいと思います。
ありがとうございました。

お礼日時:2012/06/16 22:15

いまいち何が問題なのか伝わってこないのですが・・・


簡単なコード例を出すと良いと思います。

・どのようにしてバッチIDを動的に取得してログファイル名として設定するか

実行時のクラス名を動的に取得したいということであれば、getClass().getName()でできます。


・複数のパッケージのクラスを使用するバッチの一連の処理をどのようにして一つのログファイルに出力するか

log4jを使ったことがないのでわかりかねますが・・・
ちょっと調べてみたところAppenderを使うと良いみたいですよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!