我正在尝试在DB上管理自定义日志记录服务。
我已部分遵循以下指南:
现在我有了我的LogDB类:
class LogDB extends CDbLogRoute
{
public $logTableName = "genericLog";
protected function processLogs($logs)
{
$command = Yii::app()->myAppDb->createCommand();
$logTime=date('Y-m-d H:i:s');
foreach($logs as $log)
{
$command->insert($this->logTableName,array(
'level'=>$log[1],
'category'=>$log[2],
'logtime'=>$logTime,
'userName'=>Yii::app()->user->name ,
'requestURL'=>Yii::app()->request->url,
'message'=>$log[0]
));
}
}
}
不幸的是,我无法向main.php添加新行,所以我必须在我必须使用的地方添加dyanmically。
我已经尝试过,在我必须使用DB LOG的方法中使用它:
$cc = Yii::app()->getComponent('log');
$cc->setRoutes(array(
'class'=>'LogDB ',
'connectionID'=>'db',
'enabled'=>true,
'levels'=>'info',
));
然后在我的方法中,我有这个简单的日志调用:
Yii::log(serialize($debugParameters), CLogger::LEVEL_INFO);
当然,没有写入登录数据库,我在屏幕上没有可见的错误。 这是正确的方法吗?
我没有在google上找到关于如何使用setRoutes的示例。
感谢您的任何建议!
答案 0 :(得分:1)
我终于解决了这个问题。
setRoutes命令不需要像main.php这样的数组,而是扩展* Route的对象。
$cc = Yii::app()->getComponent('log');
$dbLogRoute = new LogDB();
$dbLogRoute->enabled = true;
$dbLogRoute->levels = 'info';
$customRoutes = array($dbLogRoute);
$cc->setRoutes($customRoutes);
重要提示:setRoutes会覆盖以前的路由,所以请记住调用getRoutes(返回CMAP)并重建一个数组(CMap是只读的,所以你不能直接添加)。