logrotateを使って大量のログを切り替える
大量のログファイルが生成されるディレクトリを切り替える必要があり、logrotateが使えるかもしれない、と思ってやってみました。
2段階のconfigで実現
しかしこれでいいのか自信がありません。
そもそも大量のログを吐き出すのが間違いのような気もします。
# 1段階目。catで全ログを1ファイルにまとめる
/path/to/many/logfiles/* {
weekly
firstaction # ローテーションの前に以下を実施 = concatnated ファイルに全ログをcatする (ログファイルが存在する場合)
if ls /path/to/many/logfiles/* > /dev/null 2>&1; then
for file in /path/to/many/logfiles/*; do echo "== $file =="; stat $file; echo ""; cat $file; echo "";done >> /path/to/log/concatnated
fi
endscript
rotate 0 # ローテーションはしない = ログを削除する
missingok # 対象ログがなくてもエラーにしない
}
# 2段階目。まとめたファイルをローテーション
/path/to/log/concatnated {
weekly
rotate 50
compress
dateext
missingok
}
注意点
- ディレクトリごと切り替える、ことはできないようなので諦め。
- rotate 0 にしているので、1段階のパスに誤りがあるとログが全部消えます。
- 1つにまとめたファイル concatnated は、単にログをくっつけただけではなく、ファイル名はstatコマンドによる情報も貼り付けています。
ファイル名そのものが情報である場合のためです。