production.logのローテート
RedmineなどRuby on Railsで開発されたアプリケーションが出力するlog/production.logには情報が追記され続けます。サイズが大きくなりディスク容量が圧迫されるのを防ぐために、定期的にローテートを行うことを検討してください。
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でRedmineを稼働させている場合、logroatedを使ってこの処理を行うことができます。
/etc/logroate.d/以下に以下の内容のファイルを作成しておくと、CentOSなどRedhat系ディストリビューションでは日曜日の早朝にログがローテートされるようになります。
logroatedの設定例
(Redmineのインストールディレクトリが/var/lib/redmineの場合)
/var/lib/redmine/log/*log { missingok # ファイルが存在しなくてもエラーににない notifempty # copytruncate # ログを別名でコピーした後、元のファイルの内容を空にする compress # 古いログを圧縮して保存する }
ローテート方法
copytruncate | ログをコピーした後、元ファイルを空にする |
create mode owner group | ログの名前を変更した後、新たにログファイルを作成する |
ローテート間隔
daily | 日ごと |
weekly | 週ごと |
monthly | 月ごと |