#freeze
#setlinebreak(on)
* ログ排出機構 PEAR::Log [#z237dad6]

[[observerパターンによるログ出力の実装>PEAR/Log/observer]]

#htmlinsert(googleAdsense.html)
** 概要 [#q83c9da4]
#ref(http://dozo.rgr.jp/img/img20_file.png,right,nolink,around,PHP::PEAR)

製作フェーズでも運用フェーズでも、
なにかとLogっていうのが大切になってきます。
システム作ったときに、
デバッグしたり、
ページビュー数えたり、
障害対応したりと
そのLogの排出先を状況によって切り替えたりするのに便利。


(ノ・・)ン。。。。。。(((●コロコロッ



ログの排出コードってこんな感じですかねぇ。

    $file_handler = fopen("pg.log","a");
    fwrite( $file_handler , "大変です。サーバーが止まりました。" );
    fclose( $file_handler );

単にファイルを作って、
そこにファイルを書き込んでいるだけですが、
ログってそんなもんだと思います。
(O.O;)(o。o;)

これを適当にクラス化して、
他で流用するのが一般的ですが、
システム作るたびにこのコードを書くと、
だんだんイヤになってきます。





そこで私は[[PEAR::Log:http://pear.php.net/package/Log]]を使って、
この部分省略します。



用意されているハンドラ(ログの排出先と言った感じ)は以下の通り。

    Console   コンソール
    Display   ブラウザ(printと同じ)
    Error_Log PHPのerror_log()関数
    File      ファイルに記入
    Mail      PHPのmail()関数
    SQL(DB)   PEAR::DBを使用
    Sqlite    SQLiteに出力
    Syslog    Syslogに出力
    Window    ??

DBはあまり使わないかもしれないが、
File, Syslog, Mailあたりは使えそう。
あと、Sqliteっていうのも発想としては面白いね。
今度実践投入してみよう。



コードはほとんどありません。
重要なのは設定の配列。
ログの排出先によって設定がガラッとわかる。
排出先ごとにオブジェクトを作っていく感じかな。

    // ファイルの場合
    $conf = array('mode'=>0644);
    $logObj = &Log::singleton('file', 'logfile.log', 'ident', $conf, PEAR_LOG_NOTICE);
    // メールの場合
    $conf = array('from'=>'dozo@dozo.rgr.jp', 'subject'=>'Log');
    $logObj = &Log::singleton('mail', 'webmaster@dozo.rgr.jp', 'ident', $conf, PEAR_LOG_ALERT);
    // syslogの場合
    $logObj = &Log::singleton('syslog', LOG_LOCAL0, 'ident');
 
    $logObj->log("Log でてます?");

だいたいこんな感じ。
ホンの数行でログ排出機構が完成。
(^_^)


プログラムが動き出すのが、
Webだったり、mailだったり、cronだったりすると、
書き出すファイルのパーミッションの問題がでる。
ファイルに書き出すときは777の方が良いかもしれない。
-singleton()のパラメータの数が違うような・・バージョンに依存する?? -- [[ANN]] &new{2005-08-06 05:10:35 (土)};
-おお!?identが抜けてますね。。これは大変失礼しました。まぁ、このページにはそう言うことは良くありますのでご容赦を。 -- [[dozo]] &new{2005-08-06 10:42:06 (土)};
-hello ! -- [[Best regards]] &new{2007-06-02 03:05:21 (土)};

#comment



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較