1

CakePHP でログ システムを実装しようとしています。「書き込み」のメソッドの内容が2回呼び出されるという問題があります。これにより、システムに同じタイプのログ エントリが 2 つ配置されるため、問題が発生します。

Lib/Engine/ ディレクトリの Databaselogger.php:

App::uses('CakeLogInterface', 'Log');

class DatabaseLogger implements CakeLogInterface {


private $types = array();


public function __construct($options = array()) {
    // Allowed method calls
    $this->types = $options['types'];
}

public function write($type = NULL, $message = NULL) {

    // Only store to cache types that are permitted, other errors from cake are not reported
    if(!empty($this->types) && in_array($type, $this->types))
    {
        //make database entry here
    }
 } 
}

私のbootstrap.phpで:

App::uses('CakeLog', 'Log');
CakeLog::config('debug', array(
'engine' => 'FileLog',
'types' => array('notice', 'info', 'debug'),
'file' => 'debug',
));
CakeLog::config('error', array(
'engine' => 'FileLog',
'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
'file' => 'error',
));

// Custom configuration
CakeLog::config('mytest', array(
  'engine' => 'DatabaseLogger',
'types' => array('mytest'),
'scope' => array(),
'file' => '',
));

これは私がメソッドを呼び出す方法です:

CakeLog::write('mytest', 'this message!');

なぜこれが起こっているのかについて、誰かがヒントを与えることができますか? ありがとう!

4

1 に答える 1

0

コアファイルの名前空間は

/Log/Engine/

私はそれがすべきだと思います

/Lib/Log/Engine/DatabaseLog.php (or Logger if you want to straggle from the core naming).

によると。

次のものを含むLogEngineCollectionクラスから取得する証明。

App::uses($loggerName, $plugin . 'Log/Engine');

あなたのエンジンを含める(したがって、正しい名前空間の重要性)。

時間をかけてコアコードを調べてください。結局のところ、そのオープンソース:)

于 2013-01-15T08:47:38.997 に答える