Railsアプリにおけるログのローテーション

サーバー構築に加えてRailsアプリを作ってると、やっぱりログの管理ってのは必要になってくる。httpサーバーにApacheやNginxなど、何を採用するかによってログの管理の仕方というのは変わってくるんですが、Railsにはそもそも #{Rails.root}/log ディレクトリ内にログファイルが保存される。WEBrickを使ってる場合は、バックグラウンドで走らせない限り、そもそもコンソール画面にログが出力され続けるけどね。今回はそのRails標準ログの 最低限、これぐらいはやっとけよ!? ってローテーションを紹介。

ログのローテーションとは

つか、そもそもログのローテーションってなんやねん!ってググればすぐ出てくるし、難しいことちゃうけど、

ログローテーションとは、システムが残す記録(ログ)が際限なく増えることを防ぐために、一定の容量や期間ごとに古いログを削除したり新しいログで上書きすること。また、そのような機能。

ログはシステムに起こった出来事を時系列に記録したもので、年月の経過に伴い蓄積されていく。通常はディスク容量などは有限であるため、ログが蓄積すると空き領域を圧迫したり使い果たしてしまうことがある。

このような事態を防止するために、一定の期間を過ぎたログを削除したり、ログデータの総量が一定の容量を超えたら最も古いログを削除したりするのがログローテーションである。ログを残すソフトウェアにそのような機能が備わっている場合と、専用のツールを導入して管理する場合がある。

ログローテーションとは、システムが残す記録(ログ)が際限なく増えることを防ぐために、 一定の容量や期間ごとに古いログを削除したり新しいログで上書きすること。

引用元 e-Words: ログローテーション

ですw よーするに

ログを追記し続けるとファイルサイズが肥大化するので、日時別やファイル別などのルールを設けて、自動でログファイルを分離・削除して、肥大化の防止、ならびに既読性アップを図りましょう!

というものです。

Railsアプリでローテーションの設定。

プロダクションモードのRailsアプリにおいて、ログのローテーションを設定するには、 #{Rails.root}/config/environments/production.rb に下記を追記する。(もちろんデベロップメントモードの場合は、 development.log に追記。)

むっちゃ簡単でしょ!?w

第一引数はログのパス、第二引数は保存するログの最大数、第三引数はログファイルのサイズ(単位はbyte)を示す。この場合、log/production.log0、log/production.log1という形式でログがローテーションされ、最大10MBのログファイルが5つ保持される。古いログファイルは順次削除される。

加えて下記のようにdaily、weekly、monthlyとすると各々、日別、週別、月別でローテーションしてくれるらしい。(未検証)

ただこちらは、古いログの自動削除機能がないようなので、あまりごちゃごちゃ触るのが面倒くさい人は、前者のファイルサイズによるローテーション使うのが楽かな。

雑感

つかね、Railsの本はいろいろ出版されてるけど、今回書いたログローテーションについて触れてる本は少ない。

なんでですかねw

参考