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'
・・・・以下略