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