0

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

4

2 回答 2

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,如文档中所示。根据您编写日志路由类的方式,它可能看起来像这样:

'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...
    ),
),
于 2013-03-05T10:33:09.977 回答
0

您可以获得的最接近的方法是扩展 CLogFilter 以将有关当前类/文件名的附加信息添加到日志中。

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

于 2013-03-05T10:12:36.657 回答