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