Linux上で稼働しているRuby on RailsアプリケーションのログローテーションにRubyの Logger
クラスの機能を使うか、Linuxの logrotate
を使うか検討してみました。
Railsではログローテーションは行わず、 logrotate
で行う
理由:
Ruby on RailsではデフォルトでRubyの Logger
クラスがログ出力に利用されており、その Logger
クラスにはログローテーション機能が含まれています。
https://docs.ruby-lang.org/ja/2.2.0/class/Logger.html
例えば以下のように設定することで、ファイルサイズが10MBを超えたらログをローテーションし、古いログファイルを最大30件保持するような動作が実現できます。
config.logger = Logger.new('log/application.log', 30, 10 * 1024 * 1024)
/etc/logrotate.d/myapp
に以下のような設定を記述する
/var/www/log/*.log {
size 5M
rotate 5
create 0644 rails rails
copytruncate
missingok
notifempty
nocompress
}
/var/www/log
に出力されるので、対象は /var/www/log/*.log
にするrails
、グループ rails
で稼働させているので、ローテーション後に作成するログも同様にする664
なので、ローテーション後に作成するログも同様にするcopytruncate
をオンにする最近はAWSのマネージドサービスを組み合わせてシステムを構築することも多くなってきたので、こういったLinuxの設定周りはあまりやらなくなってきましたが、こういった運用周りの設定は嫌いじゃないです。