動作中のログをとる

debugger で止めて、p ??? で変数の内容見て、c で次の debugger へ、なんてことをやってましたが埒があきません。ちゃんとログとって見るべきです。

Rubyでのloggerの超簡単な使い方

require 'logger'
class Hoge
def initialize
  @log = Logger.new(STDOUT)
  @log.level = Logger::DEBUG
end

# Hogeクラス内の使いたいところで
@log.debug("vals=#{vals}\n")

require 'logger' して、new() して、level を設定するだけでOK。

Railsでの超簡単な使い方

Railsでは logger クラスがすでにあるので、なにもしないで使いたいところで、こんなふうにやるだけ。

logger.debug("cond=#{cond}\n")

もっと早くやっとけばよかったよ。ただ、Rails本体(Action???)が吐き出すログの中に埋没してしまうので、書き方を工夫するか、素直に /log/development.log などのファイルをエディタで見たほうがいい。

ちゃんとした情報も少し

  • logger.level = Logger::INFO
    DEBUG=0 < INFO < WARN < ERROR < FATAL < UNKNOWN=5
    例えば、ERRORを指定すると、ERROR, FATAL, UNKNOWN の3レベルのログが出力されます。
  • datetime_format=
    ログを記録する時のフォーマット
    デフォルトは "%Y-%m-%dT%H:%M:%S.%06d "
  • debug(progname = nil){ ... }
    DEBUGレベルのメッセージ。引数としてプログラム名が指定できる
  • info(progname = nil){ ... }
  • warn(progname = nil){ ... }
  • error(progname = nil){ ... }
  • fatal(progname = nil){ ... }
  • level=
    重要度を設定する
  • progname=
    ログに記録するプログラム名を設定する

参考

  1. リファレンスはこちら(→プログラミング言語 Ruby リファレンスマニュアル)