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


YII log separate file name for every class

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

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

创建您自己的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...
    ),
),

最接近的方法是扩展CLogFilter,以便在日志中添加有关当前类/文件名的附加信息。

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