CGIのデバッグ
tDiary関係のエラーの原因を調べているんだけど、CGIスクリプトのデバッグはWebブラウザ経由になるから結構大変。 特に、最近のCGIは JSP や ERb などのように、見ためとロジックが分離されているので、 print 文によるデバッグが難しかったりする。 まぁ、ローカルに環境を作ってあげればいいんだろうけど、xrea みたいなレンタルサーバだと error.log も見れないんだよね。
そこで、ログファイルにデバッグ文を出力する方法が有効になりそう。 ログのユーティリティは Java だと log4j だから、ruby だと log4r かな?と推測してgoogleで調べると、いくつかページを発見。 さらにそこからたどっていくと、なひさんが作られている logger というライブラリを見つけた。 しかも、 ruby 1.8 には標準で付いているらしい。
さっそく、 tDiary に組み込んでみた。 使い方は tdiary.rb の冒頭にて、
require 'logger' $logger = Logger.new('tdiary-debug.log')
のようにするだけ。(横着してグローバル変数にしている。もっといい方法があるかも)
あとは、デバッグ文を入れたいところで
$logger.debug 'some debug message (in ' + self.class.to_s + ')'
みたいにすれば、とりあえず OK かな。
ruby のようなオブジェクト指向は、実際に走らせて見ないとプログラムの流れが分かりにくかったりするから、これで流れを追えばかなり勉強になりそう。
追記
ログの出力をやめるには、loglevelを指定すればいいみたい。
require 'logger' $logger = Logger.new('tdiary-debug.log') $logger.level = Logger::WARN
詳しくは標準ドキュメントを参照。