Rails つまみぐい

読者です 読者をやめる 読者になる 読者になる

Rails つまみぐい

Ruby on Rails 初学者による行き当たりばったりなメモ

ログに書き出すログレベルを変更する


ログ情報のレベル分け

ログに書き出される情報は以下の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になります。