Yii - 动态添加记录路由

时间:2017-02-27 09:34:56

标签: php yii

我正在尝试在DB上管理自定义日志记录服务。

我已部分遵循以下指南:

Log Activity in Database

现在我有了我的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的示例。

感谢您的任何建议!

1 个答案:

答案 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是只读的,所以你不能直接添加)。