Rails でシンプルにログローテーションする方法です。
環境
- Rails 4.1.8
- Ruby 2.2.2
- Ubuntu 15.04 (64bit)
設定
Rails の config/application.rb
に次の記述を追加します。
1 2 3 4 |
# configure log rotation # split log by 100MB, limit log file count up to 10 config.logger = Logger.new( "#{Rails.root}/log/#{Rails.env}.log", 10, 104857600) |
ここでは 100 MB (104,857,600 バイト) で 最大 10 ファイル まで保存するようにしています。 要するに 1 GB までログを保存する。 また、 10 ファイル を超えると、古いものから削除されていきます。
Rails の標準では daily, weekly などのログの設定方法もありますが、その場合は古いログファイルは削除されません。
テスト方法
例えば development 環境 でテストする場合、 次のコマンドで 100 MB を超えるログファイルをあらかじめ作成しておく。
1 |
dd if=/dev/zero of=log/development.log bs=1M count=100 |
bs
はブロックサイズ、count
は書き込み回数を表しています。
そこで、 rails s
のコマンドでサーバを起動して、 どこかのページにアクセスします。 すると、 development.log
, development.log.0
ができているはずです。
Rails のロギングは、 SyslogLogger
や Linux の logrotate を使う方法もあります。