takayasu: January 2008 Archives

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
          }
        ];

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

About this Archive

This page is a archive of recent entries written by takayasu in January 2008.

takayasu: July 2008 is the next archive.

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