2015年9月26日土曜日

Rails4でログを日付でローテーションする

  • 公開日:2015年09月26日

記事概要


Rails4でログを日付でローテーションする設定方法を記載した記事です

環境


  • Rails4.2.4
  • Ruby2.2.2
  • bundle, rbenv

Rails4ログ設定の基本


Rails4のログはデフォルトの設定では、


{project folder}/log

の配下に出力されます。
また、ログは環境ごとに別ファイルで出力されます。

ログファイル

path 説明
log/development.log 開発環境で出力されるログ
log/production.log 本番環境で出力されるログ
log/test.log テスト環境で出力されるログ

環境ごとに出力されるログレベルはデフォルトでは以下になります。

ログレベル

環境(ENV) ログレベル(LOG LEVEL)
development debug
production info
test debug

上記で説明したことを総合すると、本番環境でのログ出力は
ログレベルinfoでlog/production.logに出力される
ということになります。

しかし、このデフォルト設定のままで、アプリを使用し続けるとログの容量が大量に蓄積してしまいます。
なので、適切なログのローテーションの設定をする必要があります。

Rails4ログローテションの設定


Rails4でログローテションの設定をするのは簡単です。

environment/production.rb

config.logger = Logger.new('log/production.log', 'daily')

上記は本番環境の設定です。
一日ごとにログローテーションをして、ログをlog/production.logに出力しています。
また、本番環境以外に適用するには、環境別の設定ファイルに記載することで反映されます。

環境別の設定ファイル

環境(ENV) 設定ファイル(SETTING FILE)
共通 application.rb
開発環境 environment/development.rb
本番環境 environment/production.rb
テスト環境 environment/test.rb

第二引数の'daily'を設定することで、production.log.YYYYMMDD.N といったログファイルが生成されます。
他にも'weekly'と'monthly'が利用できます。

また、日付でローテーションの設定をした場合、古い日付のログを自動で削除することはできません。
なので、古い日付のログが不要な場合は、シェルを作成してcronで古いログを削除するようにします。

まとめ


Rails4では他にも容量でログのログローテーションを設定することも可能です。こちらの設定をした場合、 過去のログファイルを自動で削除することができます。
また、Linuxのlogrotateの機能を利用することもできます。

どの機能にも一長一短があり、ベストな解はありません。
自分のアプリに最も適したログの設定をすることが重要になります。

以上です。

Rails4の開発にオススメの本


イノベーションを感じるのにオススメの本


運営サイト(railsで作成しています)


参考サイト

0 件のコメント:

コメントを投稿