ログに書き出すログレベルを変更する
Ruby on Rails v3.2.11
ログ情報のレベル分け
ログに書き出される情報は以下の5つのレベルのどれかに分類されています。
:debug | デバッグ情報 | 0 |
---|---|---|
:info | 一般的な情報 | 1 |
:warn | 警告情報 | 2 |
:error | エラー情報 | 3 |
:fatal | 致命的なエラー情報 | 4 |
Railsが動作している時には、どのレベルの情報までログに書き出すかを決める”ログレベル”が設定されています。ログレベルが「:debug」であれば全ての情報がログに書かれ、「:warn」であれば:warn以上、つまり:warning, :error, :fatalの情報だけがログに書き出されます。
動作モードによってデフォルトのログレベルが決められています。
動作モード(RailsEnv) | デフォルトのログレベル |
---|---|
development | :debug |
test | :debug |
production | :info |
configファイルでのログレベルの変更
各動作モードでのログレベルのデフォルトは上記のようになっていますが、それを変更したい場合、例えばproductionモードでエラー情報以上しか書き出さないようにしたい場合はconfig/environments/production.rb内で
config.log_level = :error
とします。
ログレベルを動的に変更する
特定のメソッド内だけでログレベルを:debugに変更したりといったことも可能です。
class UsersController < ApplicationController def index Rails.logger.level = Logger::DEBUG # Rails.logger.level = 0 でもOK end end
URLに与えるパラメータで制御することもできますね。ApplicationController内にbefore_filterでセットするとよいでしょう。
class ApplicationController < ActionController::Base before_filter :set_debug_mode private def set_debug_mode if params[:debug] Rails.logger.level = Logger::DEBUG end end end
こうするとURLのパラメータにdebugをつけた場合
http://localhost/users/2?debug
ログレベルが:debugになります。