ロギングを設定する

このガイドにおいて、Propelのためにどのようにロギングをセットアップするのかを見ます。Propelはエラー、警告とデバッグ情報を記録するために設定されたロギング機能を使用します(すべての重大なエラーはPropelExceptionとしてスローされます)。

組み込みのロギングはruntime-conf.xmlランタイムコンフィギュレーションファイルで設定されます。これが何であるか、どこで見つかるのかわからない場合、作業を止めてQuickstart Guideを最初に読むべきでしょう。

デフォルトでPropelはPEARで配布されているLogフレームワークを使用とします; しかしながら、独自のロギングフレームワークを使用するために -- もしくは何もしないためにPropelを設定することも簡単です。

デフォルトのロギング(PEAR)を設定する

デフォルトのロギングはプロジェクトのruntime-conf.xmlファイルの<log>セクションで設定されます。次の内容はPropelが使用するデフォルトの値を持つこのセクションのために受け入れられる形式です。

 <log>
  <type>file</type>
  <name>./propel.log</name>
  <ident>propel</ident>
  <level>7</level> <!-- PEAR_LOG_DEBUG -->
  <conf></conf>
 </log>

<level>'はPEAR_LOG_*定数によって表現される対応した整数が必要です。

定数
PEAR_LOG_EMERG0
PEAR_LOG_ALERT1
PEAR_LOG_CRIT2
PEAR_LOG_ERR3
PEAR_LOG_WARNING4
PEAR_LOG_NOTICE5
PEAR_LOG_INFO6
PEAR_LOG_DEBUG7

ネストされた要素のそれぞれの意味は使用しているLogコンテナによって変わります。 また、Logコンテナの多くに関しては、すべてのこれらのパラメータはすべて要求されません。

いくつかの例です:

例 1: 'display'コンテナを使用する (HTMLに出力するため)

 <log>
  <type>display</type>
  <level>6</level> <!-- PEAR_LOG_INFO -->
 </log>

例 2: 'syslog' コンテナを使用する

 <log>
  <type>syslog</type>
  <name>8</name> <!-- LOG_USER -->
  <ident>propel</ident>
  <level>6</level>
 </log>

カスタムロギングを設定する

多くの場合、Propelのロギング機能とあなたのウェブアプリケーションの残りを統合したいことがあります。runtime-conf.xml<log>セクションを省略するとPropelは*どの*ロギングもセットアップしません。この場合、ログメッセージを望む場合、Propelのためにロギング機能を設定すべきです。

独自のPEARロガーを設定する

独自のPEARロガーを設定してPropelがロギングのためにこれを使用するようにする方法の例です。

<?php

require_once 'Log.php';
$logger = Log::factory('syslog', LOG_LOCAL0, 'propel', array(), PEAR_LOG_INFO);

require_once 'propel/Propel.php';

Propel::setLogger($logger);
Propel::init('/path/to/runtime-conf.php');

PEARではないロガーを使用する

Propelと互換性を持つためにログコンテナが実装しなければならないインターフェイスを指定するPropelランタイムで提供されたBasicLoggerインスタンスがあります。実際にはインターフェイスを実装する必要はありませんが、すべての指定されたメソッドはコンテナに存在しなければなりません。

PropelでMojavi loggerを使うことが出来るようにするMojaviLogAdapterクラスも搭載されています。

次のコードはPropelを使用するために適切でシンプルなログコンテナの例です:

<?php

class MyLogger {

  public function emergency($m) {
    $this->log($m, Propel::LOG_EMERG);
  } 

  public function alert($m) {
    $this->log($m, Propel::LOG_ALERT);
  }
  
  public function crit($m) {
    $this->log($m, Propel::LOG_CRIT);
  }
  
  public function err($m) {
    $this->log($m, Propel::LOG_ERR);
  }

  public function warning($m) {
    $this->log($m, Propel::LOG_WARNING);
  }

  public function notice($m) {
    $this->log($m, Propel::LOG_NOTICE);
  }

  public function info($m) {
    $this->log($m, Propel::LOG_INFO);
  }

  public function debug($m) {
    $this->log($m, Propel::LOG_DEBUG);
  }

  public function log($m, $priority) {
    $this->display($m, $this->priorityToColor($priority));
  }
  
  private function display($message, $color) {
    echo "<p style='color: $color'>$message</p>";
  }

  private function priorityToColor($priority) {
     switch($priority) {
       case Propel::LOG_EMERG:
       case Propel::LOG_ALERT:
       case Propel::LOG_CRIT:
       case Propel::LOG_ERR:
         return 'red';
         break;       
       case Propel::LOG_WARNING:
         return 'orange';
         break;
       case Propel::LOG_NOTICE:
         return 'green';
         break;
       case Propel::LOG_INFO:
         return 'blue';
         break;
       case Propel::LOG_DEBUG:
         return 'grey';
         break;
     }
  }
}

?>

... 簡単にPropelにフックインすることが出来ます:

<?php

require_once 'MyLogger.php';

$logger = new MyLogger();

require_once 'propel/Propel.php';

Propel::setLogger($logger);
Propel::init('/path/to/runtime-conf.php');