如何覆盖CakePHP Log()函数

时间:2013-05-03 11:39:00

标签: cakephp cakephp-1.3

我需要覆盖默认的CakePHP Log()函数,以便它写入数据库而不是文件。我不在乎这是不是一个好主意,我只是想知道如何首先覆盖当我去$this->Log("blah")时发生的事情,其次我将如何在app_controller中引用Log table元素表单或我正在执行覆盖的其他类。

1 个答案:

答案 0 :(得分:1)

首先,在数据库中创建一个表来存储日志:

CREATE TABLE IF NOT EXISTS `logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

app/model目录中创建一个名为log.php的文件并将此代码放入其中:

<?php

class Log extends AppModel {

    var $name = 'Log';

    function write($type, $message) {
        $this->save(array(
            'Log' => array(
                'type' => $type,
                'message' => $message
            )
        ));
    }

}

这是日志引擎,但它也是一个模型,因此您可以自定义它以使用不同的数据源或表。唯一的要求是接受这些参数的write函数。

修改app/config/bootstrap.php并在文件末尾添加此代码:

App::Import('Model','Log');

CakeLog::config('otherFile', array(
    'engine' => 'Log',
    'model' => 'Log',
));

您现在可以使用$this->log($type, $message);$this->log($message);的日志,默认为错误类型。

有一些关于在CakePHP手册中创建custom logging引擎的信息。