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