Railsでログファイルに例外トレース情報を出す
Railsでログをファイルに書き出すには、コントローラで利用できるloggerオブジェクトを使う。このオブジェクトを使ってログを出すと、開発時にはlog/develpment.logにログが出力される。
logger.debug "デバッグメッセージ" logger.fatal "Fatalメッセージ"
例外をキャッチしたときそのトレース情報をログに出したいときは、上記のメソッドとExceptionクラスのbacktraceメソッドを利用する。
backtraceメソッドは、トレース情報をStringの配列で返すので、以下の例では配列を改行文字で連結し出力している。
Exceptionクラスについては⇒プログラミング言語 Ruby リファレンスマニュアル
begin # 例外が発生する可能性のあるコード rescue => e # 例外発生時 logger.fatal "[FATAL] なになに例外が発生しました" logger.fatal e.backtrace.join("\n") end
そして、log/development.logには以下のように出力される。
[FATAL] なになに例外が発生しました D:/apps/ruby/ruby-1.8.6-p111-i386-mswin32/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:478:in `const_missing' D:/projects/abc/app/controllers/admin/result_standard_costs_controller.rb:49:in `update' D:/projects/abc/app/controllers/admin/result_standard_costs_controller.rb:43:in `each' D:/projects/abc/app/controllers/admin/result_standard_costs_controller.rb:43:in `update' D:/apps/ruby/ruby-1.8.6-p111-i386-mswin32/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in `transaction' D:/apps/ruby/ruby-1.8.6-p111-i386-mswin32/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/transactions.rb:80:in `transaction' ・・・・以下略