我需要覆盖默认的 CakePHP Log() 函数,以便它写入数据库而不是文件。我不在乎这是否是一个好主意,我只是想知道我将如何着手首先覆盖我去时发生的事情$this->Log("blah")
,其次我将如何在 app_controller 或其他类中引用日志表元素表单执行覆盖。
问问题
335 次
1 回答
2
首先,在数据库中创建一个表来存储日志:
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
)
));
}
}
那是日志引擎,但它也是一个模型,因此您可以自定义它以使用不同的数据源或表。唯一的要求是接受这些参数的写入函数。
编辑app/config/bootstrap.php
并在文件末尾添加此代码:
App::Import('Model','Log');
CakeLog::config('otherFile', array(
'engine' => 'Log',
'model' => 'Log',
));
您现在可以将日志与$this->log($type, $message);
或$this->log($message);
默认为错误类型一起使用。
CakePHP 手册中有一些关于创建自定义日志引擎的信息。
于 2013-05-03T14:56:34.123 回答