Railsでログローテーションする方法
Ruby on Rails v3.2.11
Railsアプリケーションを動かしてるとログファイルがどんどん大きくなっていきます。ログファイルが巨大化しすぎると開くのに時間がかかっちゃいますし、何よりも大切なディスクスペースを圧迫してしまいます。
そこでログローテートです。定期的にログファイルを分割したり、古いのを捨てていったりするわけです。
ログファイルを指定サイズで分割
config/environments/production.rbファイル内で
config.logger = Logger.new("log/production.log", 5, 10 * 1024 * 1024)
とセットすると、ログファイルのサイズが10MBを超える毎に新しいログファイルを自動的に作って、古いログファイルをproduction.log.0とかproduction.log.1とかの名前にしていって、5ファイルを超える分を削除していってくれます。
ログファイルを日数で分割
config/environments/production.rbファイル内で
config.logger = Logger.new("log/production.log", 'daily')
config.logger = Logger.new("log/production.log", 'weekly')
config.logger = Logger.new("log/production.log", 'monthly')
などとします。production.log.20130120といったファイルが次々とつくられますが、こちらは自動で削除されていかないようです。
ログレベルの設定について
こちらの記事(ログに書き出すログレベルを変更する - Rails つまみぐい)で書いたようにログレベルはconfigファイルで変更ができますが、上記のように config.logger = Logger.new とした場合についてはRails.logger.levelで設定します。
Rails.logger.level = Logger::WARN # Rails.logger.level = 2 でもOK
config.log_levelでは設定できません(設定しても何も変わりません)。要注意です。