自定义日志方法

时间:2013-01-15 04:24:37

标签: cakephp cakephp-2.0

我正在尝试在cakePHP中实现日志系统。我现在有一个问题是“write”中的方法内容被调用两次。这会导致问题,因为它在我的系统中放置了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!');

任何人都可以提供一些提示,说明为什么会发生这种情况?谢谢!

1 个答案:

答案 0 :(得分: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');

包含你的引擎(因此正确命名空间的重要性)。

请花点时间查看核心代码。它的开源毕竟是:)