ジョブ実行ログ出力部品

概要

ジョブ実行ログ出力部品 com.nec.webotx.batch.util.BSJobExecutionLogUtil は、ジョブの実行毎に作成される ジョブ実行ログファイル に出力する為のLoggerです。
利用者は、作成するジョブ内でこのLoggerを利用することで、バッチ処理内から任意のメッセージを ジョブ実行ログファイル に出力し、ジョブ開始コマンド(jobctl startstart-job)、および、ジョブ実行結果取得コマンド(jobctl resultresult-job)の標準出力に出力させることができます。

バッチアプリケーションの実行スケジューリング、および、結果の管理を担う一般的なジョブスケジューラ製品では、ジョブとして定義されたバッチ処理の開始時に起動したプロセスの標準出力、標準エラー出力、および、プロセスの戻り値(exit code)をハンドリング、保持することで、バッチ処理の結果の管理に利用しています。
シンプルなバッチアプリケーション(※)では、バッチ処理の開始時に起動するプロセスと、バッチ処理を実行するプロセスが同一である為、バッチ処理内で標準出力、標準エラー出力に出力したメッセージが、バッチ処理の開始時に起動したプロセスの標準出力、標準エラー出力に出力されます。
※ Unixのシェルスクリプト や Windowsのバッチファイルでバッチ処理を実装したバッチアプリケーション 等
Batch Serverでは、バッチ処理を実行するプロセスを常駐化させている為、バッチ処理の開始時に起動するプロセス(≒ジョブ制御コマンドプロセス)と、バッチ処理を実行するプロセス(≒コンテナプロセス)とが別プロセスとなっています。その為、バッチ処理内で標準出力、標準エラー出力に出力したメッセージは、コンテナプロセスの標準出力、標準エラー出力に出力されるだけで、ジョブ制御コマンドの標準出力、標準エラー出力には出力されません。
Batch Serverでは、ジョブの実行毎に ジョブ実行ログファイル を作成し、ジョブ開始コマンド(jobctl startstart-job)、および、ジョブ実行結果取得コマンド(jobctl resultresult-job)の標準出力に転送することができます。
このような仕組みにより、シンプルなバッチアプリケーションと同様の方法で、ジョブスケジューラ製品等のバッチ処理を開始する側で、バッチ処理が出力するメッセージを取得することを可能にしています。

関連

1.1. Log API を通じた利用

ジョブ実行ログはcommons-loggingのLog APIにより出力することができます。
ジョブ実行ログ出力部品 BSJobExecutionLogUtil は、Logインスタンス取得用のstaticメソッドを提供しています。

下記は、"messages"という文字列を、ジョブ実行ログにINFOレベルで出力する例です。

import org.apache.commons.logging.Log;
import com.nec.webotx.batch.util.BSJobExecutionLogUtil;

public class SomeUserClass
{
  public void userLogic()
  {
    static Log log = BSJobExecutionLogUtil.getLogger();
    log.info("messages");
  }
}

1.2. ItemProcessor としての利用

ItemProcessorAdapterと組み合わせることにより、読込んだItemの文字列表現をログに出力する単純なItemProcessorを定義できます。

下記は、読込まれたItemオブジェクトのtoString()の結果をジョブ実行ログにINFOレベルで出力するItemProcessorの定義例です。
targetMethodの値は、BSJobExecutionLogUtilのメソッド名です。出力ログレベルを変更するには、targetMethodの値を変更します。

 <bean id="infoLogWriter"
          class="org.springframework.batch.item.adapter.ItemProcessorAdapter">
     <property name="targetObject">
         <bean class="com.nec.webotx.batch.util.BSJobExecutionLogUtil"/>
     </property>
     <property name="targetMethod" value="info"/>
 </bean>