ログファイルに出力
問題が合ったときにコンソールだけでなくファイルにもエラーログを出力したいときのこと。
例外の投げ方は前書いたものと同じようにしておく。
その下にファイルにもエラーログを書く部分を示す。
def user(input_data) begin # 入力値が適正かチェック raise Exception, %[データ(#{input_data})が不正] if not valid(input_data) rescue Exception => message error(message.to_s) end # 以下通常処理・・・ end def error(mes) # エラー出力ファイル指定 Ramaze::Log.loggers << Ramaze::Logging::Logger::Informer.new('logfile.txt') # エラーとしてログを残す Ramaze::Log.error(mes) # Ramaze::Log.debug(mes) # Ramaze::Log.warn(mes) # 以下適当にエラー処理する end
Ramaze本家には
Ramaze::Log.loggers << Ramaze::Informer.new(__DIR__/:logs/"ramaze_#{Time.now.strftime('%Y%m%d%H%M%S')}.log")
このようなことが書かれているのだが、これだとRamaze::Informerがないと言われてしまう。
実際に/var/lib/gems/1.8/gems/ramaze-2008.06/lib/ramaze/log/informer.rb(Ubuntu 8.04)を見てみると分かるが、構造が違うため、上記コードのように書かなければならないらしい。
9/4 追記
実際に動かしてから気づいたのですが、
Ramaze::Log.loggers << Ramaze::Informer.new(__DIR__/:logs/"ramaze_#{Time.now.strftime('%Y%m%d%H%M%S')}.log")
はstart.rbに書いておくべきのようです。
MainController#errorに書いておくと毎回新しくファイルが生成されるor書き潰されることになります。
start.rbに書いておけば
$ ruby start.rb
を実行した時刻でファイルが開かれっぱなしとなるため、予期したログの取り方ができました。