Linuxのログローテートを使ったので備忘録的に記載する。
検証環境
- Ubuntu 18.04(WSL2)
設定方法
logrotateの設定は/etc/logrotate.conf
の中で実施します。が、個別のアプリケーションは/etc/logrotate.d/
配下に個別の設定ファイルを作成して設定するのがメンテナンス面も考えてよいでしょう。
今回は/var/log/test_app.log
というファイルをローテートする例を書いていきたいと思います。
まずは個別の設定ファイルを作成
個別アプリケーション専用の設定ファイルを/etc/logrotate.d/
配下に作成します。
区別がつけられるようにアプリ名をつけるといいと思います。
$ sudo touch /etc/logrotate.d/test_app
設定ファイル内に任意で記載した設定が反映されます。詳しくはlogrotateのmanを確認してください。参考サイトに日本語で説明してくださってるページを載せております。今回は下記項目を設定したいと思います。
設定 | 設定例 | 説明 |
---|---|---|
daily | daily | ローテートが行われるタイミング。dailyなので、毎日ローテートが行われます。Weeklyにすることで週単位のローテートに変更することも可能。weekly [曜日]で曜日指定することも可能。(0が日曜日、6が土曜日) |
rotate | rotate 7 | ローテートして保持される世代数。これを超えると削除されます。左記では7としているので1週間分の過去ログを保持します。 |
missingok | missingok | ローテートのタイミングで指定しているログファイルが存在しない場合でもエラー出力はしません。 |
copytruncate | copytruncate | ローテート対象ファイルをコピーした後、大元のファイルの中身を空にします。 |
dateext | dateext | ローテートファイルの末尾を日付で管理します。 |
dateyestarday | dateyestarday | dateextで付与される日付を前日日付でつけてくれます。 |
dateformat | dateformat | ローテートファイルの末尾の日付のフォーマットを指定します。 |
では実際に設定してみます。
/var/log/test_app.log{i su root root daily rotate 7 missingok copytruncate dateext dateyestarday dateformat _%Y%m%d }
dateformatに設定したのはログファイルがローテートしたときにローテートファイル名に付与してくれます。この場合、test_app.log_20210228となります。(執筆日現在) 設定した項目が問題ないかチェックをすることができます。
logrotate -d /etc/logrotate.d/test_app
問題がある場合は標準出力にエラーが出力されます。
強制的にローテートを実行させる場合には下記コマンドのように実行させたいローテート設定をForceで指定して実行します。
$ /usr/sbin/logrotate -f /etc/logrotate.d/test_app
でローテートさせることができます。