JP1/AJSでジョブを運用しているとき、後からトラブルシューティングをするために「ジョブが実際に画面に出力したテキスト(標準出力・標準エラー出力)」をログとして残しておきたいケースは多いですよね。
「全体のざっくりしたエラーは hntr29.log(統合トレースログ)を見ればわかるけど、バッチやスクリプトが吐き出した詳細なログ(エラーの中身)はどこにあるの?」
実は、ジョブの詳細な実行結果は、ジョブの定義で出力先ファイルを明示的に指定してあげる必要があります。
今回は、JP1で標準出力・標準エラー出力をファイルに残す設定手順と、運用にのせる上で誰もが突き当たる「追記(追加書き)したログファイルのローテーション(容量肥大化)問題」の解決策について解説します!
1. ジョブの実行結果詳細(標準出力)をファイルに保存する手順
JP1のデフォルト状態では、各ジョブの標準出力(stdout)や標準エラー出力(stderr)は自動的にファイル保存されません。以下の手順で設定を追加します。
➔ 設定手順(JP1/AJS3 – View)
-
対象のジョブのプロパティ(ジョブ定義の編集画面)を開きます。
-
設定項目の中にある「標準出力ファイル名」と「標準エラー出力ファイル名」の欄を確認します。
-
それぞれログを保存したいファイルの絶対パスを入力します。
-
(例)
C:\JP1_Logs\job_output.log
-
-
必要に応じて、ファイルの出力モードを「追加書き(追記)」にするか「上書き」にするかを選択して保存します。
これだけで、次回ジョブが実行された際、指定したファイルに詳細な実行結果が書き込まれるようになります。
2. 【運用上の疑問】追加書きしたログの「ローテーション」はどうする?
ここで気になるのが、「『追加書き』を選んだ場合、ログファイルがどんどん肥大化して、いつかディスクを満杯にしてしまうのでは?」という問題です。
残念ながら、JP1のジョブ定義で指定した標準出力ファイルには、JP1自身が自動でファイルを世代管理したり、ローテーションしたりする機能はありません。
そのため、本番運用でファイルが肥大化するのを防ぐには、以下のいずれかの方法で「人間側(システム側)」でローテーションの仕掛けを作ってあげる必要があります。
🛠️ 標準出力ログをローテーションさせる3つの解決策
解決策①:ファイル名に「マクロ変数」を使い、日付ごとに分ける(おすすめ)
毎回同じファイル名に追記するから肥大化するのであって、「実行する日ごとにファイル名を自動で分ける」のが一番スマートです。
JP1のジョブ定義のファイル名部分に、以下のようなマクロ変数を仕込みます。
-
記述例:
C:\JP1_Logs\job_output_?AJS2JOBEXECDATE?.log
こうすると、実行された日付(例:20260604)がファイル名に自動で埋め込まれるため、日別にログが独立します。あとは、古いログを定期的に消去する「ログ削除ジョブ」を1つ作ってスケジュールしておけば、ローテーションの完成です。
解決策②:OS標準の機能に任せる(Linuxの場合など)
もしJP1のエージェントがLinux環境であれば、OS標準のログ管理機能である logrotate の監視対象に、指定したファイル( /var/log/jp1/job_output.log など)を追加してあげるのが確実です。設定ファイルに「容量が〇MBを超えたらローテーションする」と書いておけば、OS側が自動で世代管理してくれます。
解決策③:運用ルールとして「上書き」にする
もし「過去の実行ログは必要ない、前回の実行結果(最新の1回分)だけ見られればいい」という割り切った運用ができるのであれば、追加書きではなく「上書き」に設定するのも手です。これならファイルサイズが一定以上増えることはありません。
まとめ
JP1のジョブ実行結果の詳細は、hntrXX.log には残らないため、「標準出力ファイル名」の指定が必須です。
そして、追加書き(追記)で運用する場合は、必ず「マクロ変数での日付分散」や「外部ツールでのローテーション」をセットで設計しておくことが、ディスク容量パンクの悲劇を防ぐための鉄則です。
これからジョブの定義を作り込む方は、ぜひこのログローテーションの罠を意識して設定してみてくださいね!
