PerlのWebアプリでの単純なデバッグ

| | Comments (0) | TrackBacks (0)
PerlでWebアプリをつくる際に困るのが、ブラウザ上の画面からはInternal Server Errorということしかわからないということです。
Webサーバのerror_logを見ればもうちょっと細かく何が起こったか把握することが可能ですが、やはり情報が少ないです。
そのようなときはログを出力することによって、たくさんの情報を取得することができるようになります。
ログ出力の重要なことは、出力するメソッドと出力する内容です。

ログ出力をするメソッドはファイルに出力するだけであれば以下のようになります。

sub log {
    my @str = @_;
    my $logfile = <ログファイルパス>;

    open LOG, "$logfile" || return 0;
    print LOG join '' @_;
    close LOG;

    return 1;
}
上記のメソッドでは、ただファイルに文字が出力されるだけなので使いやすくするには日時などを出力できるようにします。


オブジェクト指向で作っている場合はこのメソッドをたくさんのクラスに書く必要があるかもしれません。
そのような際はUNIVERSALメソッドにすることによって集約することができます。
UNIVERSALメソッドは任意のクラスに"UNIVERSAL::メソッド名"というようなメソッドを定義することによってどのクラスから呼ばれても呼び出すことが可能なメソッドを作成することができます。

しかし、UNIVERSALメソッドは別モジュールとのメソッド名の衝突や、どこのクラスから呼び出されているかわからなくなるデメリットがあるのでむやみに使うことはやめた方がいいでしょう。


次に出力される内容をわかりやすくするためにData::Dumperを使います。
Data::Dumperは配列やハッシュといったものも視覚的にわかりやすく表示することが可能です。
たとえば、配列のリファレンスの各要素にハッシュのリファレンスが格納されているデータは以下のように表示されます。


$VAR1 = [
          {
            'name' => 'foo',
            'age' => 30
          },
          {
            'name' => 'bar',
            'age' => 22
          }
        ];

このように見やすい形でログを出力できるようにしておくことでより効率的に開発を行うことが可能になります。

0 TrackBacks

Listed below are links to blogs that reference this entry: PerlのWebアプリでの単純なデバッグ.

TrackBack URL for this entry: http://lab.hde.co.jp/blog/mt-tb.cgi/8

Leave a comment

About this Entry

This page contains a single entry by takayasu published on January 29, 2008 6:30 PM.

パスワードは何文字が安全なのか? was the previous entry in this blog.

jQuery(1) : jQueryの基本を学ぼう is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.