YII记录每个类的单独文件名

时间:2013-03-04 21:21:22

标签: php yii

我希望每个类都能拥有自己的.log文件。
我不想在config / main.php文件中手动执行此操作,而是以某种方式执行此操作 用另一个参数将它发送到日志函数,是可能的(也许以某种方式继承它)?

2 个答案:

答案 0 :(得分:1)

你可以这样做,但你需要编写一些代码。具体来说,您必须:

创建自己的CLogRoute

实现

标准CFileLogRoute将日志消息写入单个文件。修改代码并编写自己的代码应该不难。 OneFilePerClassLogRoute能满足您的需求。例如,processLogs方法的实现以

开头
protected function processLogs($logs)
{
    $logFile=$this->getLogPath().DIRECTORY_SEPARATOR.$this->getLogFile();
    // ...
{

参数$logs是一个数组;每个项目都是一个包含四条信息的数组(如果你看formatLogMessage,你可以看到它们是什么)。其中之一是每条消息的“类别”。您可以对类别使用类名,并使processLogs根据其类别(即与其相关的类)将每条消息写入单独的文件。

将必要的信息传递给记录器

当然,为此,您需要将当前类名称作为每个日志消息的类别传递。幸运的是,使用__CLASS__魔法常数非常容易:

Yii::log($message, $level, __CLASS__);

配置Yii以使用您的日志路由

最后,不要忘记使用自定义日志路由配置Yii,如documentation所示。根据您编写日志路由类的方式,它可能如下所示:

'log'=>array(
    'class'=>'CLogRouter',
    'routes'=>array(
        array(
            'class'=>'MyCustomLogRoute',
            'logPath'=>'where_your_logs_will_be_saved',
            //...other options for your custom route here...
        ),
        // ...other routes here...
    ),
),

答案 1 :(得分:0)

最接近的是扩展CLogFilter以在日志中添加有关当前类/文件名的其他信息。

http://www.yiiframework.com/doc/guide/1.1/en/topics.logging#logging-context-information