毎日の長期実行プロセスの出力を新しいログファイルにリダイレクトする

毎日の長期実行プロセスの出力を新しいログファイルにリダイレクトする

プロセスの開始時間に基づいて出力がログファイルにキャプチャされる長期実行プロセス1があります。

export LOG_FILE=${LOGS_DIR}/$LOGNAME/${LOGNAME}-`date +%Y%m%d-%H%M%S`.txt
...
${TARGET_SCRIPT} ${OPERATION} ${ARGS} >> ${LOG_FILE} 2>&1

問題は、ほとんどのアプリケーションロギングはロギングフレームワークを介して実行されますが、一部のエントリは依然としてstdoutとstderrにこっそり入り、問題が発生するとコンソール出力ログが非常に大きくなる可能性があります。

すべてのログ(コンソールログとロギングフレームワークのログを含む)は、スペースが限られた高性能ファイルシステムに書き込まれるため、Jenkinsジョブを実行して1週間の手の届かないファイルを保持します(必要に応じて圧縮)。

これは、前日のログを圧縮する前に深夜にログファイルをローリングするデフォルトのロギングフレームワークに非常に効果的です。ランアウェイログは、圧縮されていない出力が最大1日だけ可能であり、ランアウェイログを圧縮すると圧縮効率が非常に高い可能性があるため、自動アーカイブでファイルシステムがいっぱいになるリスクを最小限に抑えます。

ただし、コンソールログはファイルが一度に数ヶ月間保存される可能性があるため、うまく機能せず、プロセスを再起動しなければ新しいファイルが作成されないため、1週間後にjenkinsジョブがファイルを圧縮してアーカイブできます。

それでは、コンソールログを毎日分割するにはどうすればよいですか?

私が望むのは、このプログラム/スクリプトを作成(徹底的にテスト)せずに、同様のプログラム/スクリプトに>> ${LOG_FILE}置き換えることです。このようなものがすでに存在していれば幸いですが、私のGoogle fooはこれまで私を失望させませんでした。| logsplitter --append ${FILE_SPEC}logsplitter

1 - 数ヶ月間実行することができます。
2 - 私たちが使用するいくつかのライブラリは、コンソールに直接エラーメッセージを生成します。
3 - ロギングフレームワークの欠陥が原因でstderrロギングに置き換えられます。

ベストアンサー1

おすすめ記事