0

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

4

1 回答 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 回答