我希望能够为每个类拥有自己的.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