時間旅行とログファイル

時間旅行とログファイル

開発システムでレガシーコードベースの変更をテストするときに私が好むテスト方法は、システムクロックを過去の日付に設定し、いくつかのタスクを再生し、出力date -s '-7 days'とログファイルを確認してから進むことです。日付を1日単位で指定してから、より多くのタスクを再生し、出力とログを1日前に確認し、必要に応じてデフォルトで繰り返します。

最初のルックアップ後の再生操作の前に、次のコマンドを実行して将来の変更日のログファイルを切り捨てます。

logs=$(find /var/log -type f -mtime -0); for log in $logs; do cat /dev/null > $log; done

これによりログファイルが消去されますが、実際に必要なのは、サーバー/var/log/の現在の日付以降に発生するサブディレクトリ()の下にあるファイルから「将来のエントリ」を削除する方法です。apache/mysql/...

ログの削除に役立つユーティリティ/ツールはありますか?記入今やっているように、ファイルを完全に切り取るのではなく、将来から始めてください。

私はDebianの安定版を使用しています。

答え1

システムが logrorate を使用している場合は、logrorate -f を使用できます。これにより、すべてのログが即座に回転(つまり消去)されます。 logrotate(8) を参照してください。

編集:実際には、システムはlogrotateを永久に使用する必要はありません。このループラウンド用の設定ファイルを準備し、時間を元に戻して実行できます。 Logrorateのもう1つの利点は、すべての実際のログが失われることなく、gzipにのみ圧縮され、最も古いgzipが削除されることです。

答え2

何らかの方法でログディレクトリのスナップショットを撮ります。

あなたのシナリオは、仮想マシンでテストを実行する必要があるように聞こえます。 VMのスナップショットを作成してテストを実行した後、テスト結果を取得したら、VMの状態を削除してスナップショットを復元します。

仮想マシンのスナップショットを作成せずにテストを実行するには、ログディレクトリをバックアップしてバックアップを復元し、テスト後にsyslogデーモンを再起動します。あるいは、一時的にtmpfsファイルシステムをマウントし/var/log、syslogdを再起動し、テストを実行し、アンマウントして/var/logsyslogdを再起動することもできます。

関連情報