production.logのローテート
RedmineなどRuby on Railsで開発されたアプリケーションが出力するlog/production.logには情報が追記され続けます。サイズが大きくなりディスク容量が圧迫されるのを防ぐために、定期的にローテートを行うことを検討してください。
方法①:Railsのloggerを利用
Redmineの config/additional_environment.rb にLoggerの設定を追加することで、一定サイズあるいは一定期間ごとにローテートさせることができます。
例えば以下の設定を行うとログが10MBに達するごとにローテートし、最大10世代分保持します。
config.logger = Logger.new("log/#{Rails.env}.log", 10, 10240000)
2番目のパラメータに daily, weekly, または monthly のいずれかを指定すると、毎週、毎日、または毎月ローテートさせることができます。以下は日ごとにローテートさせるための例です。
config.logger = Logger.new("log/#{Rails.env}.log", 'daily')
Logger.new に対して指定できるパラメータはRubyのLoggerクラスのリファレンスマニュアルで確認できます。
https://docs.ruby-lang.org/ja/latest/class/Logger.html#S_NEW
方法②:Linuxのlogroatedを利用
LinuxでRedmineを稼働させている場合、logroatedを使ってこの処理を行うことができます。
/etc/logroate.d/以下に以下の内容のファイルを作成しておくと、CentOSなどRedhat系ディストリビューションでは日曜日の早朝にログがローテートされるようになります。
logroatedの設定例
(Redmineのインストールディレクトリが/var/lib/redmineの場合)
/var/lib/redmine/log/*log {
missingok # ファイルが存在しなくてもエラーににない
notifempty #
copytruncate # ログを別名でコピーした後、元のファイルの内容を空にする
compress # 古いログを圧縮して保存する
}
logrotatedの設定オプション
ローテート方法
| copytruncate | ログをコピーした後、元ファイルを空にする |
| create mode owner group | ログの名前を変更した後、新たにログファイルを作成する |
ローテート間隔
| daily | 日ごと |
| weekly | 週ごと |
| monthly | 月ごと |