- 公開日: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でログローテションの設定をするのは簡単です。
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で作成しています)
参考サイト
- Railsドキュメント
 - 20150110 Railsでのログ/ロガーまとめ(ログ出力、ログレベル、ロガー作成、ログフォーマット)
 - Rails Logging Settings
 - 指定日付より古いファイルを検索して削除Add Star
 


0 件のコメント:
コメントを投稿