Web を見ていてログローテーションの記事を見かけたので、そういえばさくらの VPS で動かしている Rails アプリのログはどうなってるんだろう、と思った。で、調べてみるとつぎの通り。
[takatoh@tk2-254-36564 log]$ ls -lh 合計 1.2G -rw-r--r-- 1 root root 25K 5月 5 09:53 2017 development.log -rw-r--r-- 1 root root 1.2G 12月 5 03:56 2018 production.log
うわあああああ、production.log が 1.2GB もあるううう!!!!!
こりゃ、ぜひともログローテーションしなきゃ、と思って調べてみると、Rails にはログのローテーションをする機能があるらしい。アプリのディレクトリ以下の config/environments/production.rb ファイルで、つぎのようにすればいいようだ。
config.logger = Logger.new("log/production.log", 'daily')
ところが、実際に動いているアプリのファイル(の該当部分)を見てみるとつぎのようになっている。
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
コメントアウトしてあるのはいいとしても、Rails のバージョンのせいなのか何なのか、全然違う。はっきりいってこういうのはウカツに弄りたくない。
というわけで、logrotate
でやってみることにした。さくらの VPS では logrotate
がデフォルトで動いている(らしい)ので、/etc/logrotate.d 以下に設定ファイルを書いて置いてやればいい。
/var/www/lathercraft/log/production.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/sbin/service unicorn_lathercraft rotate > /dev/null 2> /dev/null || true
endscript
}
参考にしたページ:
cf. さくらのVPSの設定 – logrotateの設定
テストしてみる。
[takatoh@tk2-254-36564 logrotate.d]$ logrotate -dv unicorn_lathercraft reading config file lathercraft reading config info for /var/www/lathercraft/log/production.log Handling 1 logs rotating pattern: /var/www/lathercraft/log/production.log after 1 days (14 rotations) empty log files are not rotated, old logs are removed considering log /var/www/lathercraft/log/production.log log does not need rotating not running postrotate script, since no logs were rotated
エラーらしきものは出てないので、いいのかな。
とりあえずこれで様子を見てみよう。