Yii1打印当前请求所有执行的SQL及耗时

Yii1打印当前请求所有执行的SQL及耗时,第1张

概述我们在熟悉新的项目了解业务的时候,可以有很多方式。看项目文档说明;和了解项目身边的人沟通;通过自己度代码调试,但是一步步调试打印语句或许有点慢,如果可以调出当前请求的所有语句,那么很快可以熟悉他的业务。再或者自己开发中排查问题。公司所用的框架是yii,由于项目比较早了,好像是1

我们在熟悉新的项目了解业务的时候,可以有很多方式。看项目文档说明;和了解项目身边的人沟通;通过自己度代码调试,但是一步步调试打印语句或许有点慢,如果可以调出当前请求的所有语句,那么很快可以熟悉他的业务。再或者自己开发中排查问题。

公司所用的框架是yii,由于项目比较早了,好像是13年开始的,所以我的测试版本是yii1,我所尝试的调试也是直接搜了很多帖子,在项目中实践可用,应该是兼容1和2版本的。

[第一种]

①修改 index.PHP 开启调试模式

//index.PHP//开启调试模式defined('YII_DEBUG') or define('YII_DEBUG',true);//设置日志记录级别,YII_TRACE_LEVEL的数字越大,信息越清楚defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

②修改配置文件 main.PHP

默认的日志是输出到protected/runtime/application.log
如果需要修改那么需要在main.PHP里面的components下面增加log配置,如下:

'preload' => array('log'),//这句也必须加上

在 Yii 中,有下列几种日志路由可用:

CDbLogRoute: 将信息保存到数据库的表中。
CEmailLogRoute: 发送信息到指定的 Email 地址。
CfileLogRoute: 保存信息到应用程序 runtime 目录中的一个文件中。
CWebLogRoute: 将 信息 显示在当前页面的底部。
CProfileLogRoute: 在页面的底部显示概述(profiling)信息。

注:信息路由发生在当前请求周期最后的 onEndRequest 事件触发时。 要显式终止当前请求过程,请调用 CApplication::end() 而不是使用 dIE() 或 exit(),因为 CApplication::end() 将会触发 onEndRequest 事件, 这样信息才会被顺利地记录。

'log'=>array(            'class'=>'CLogRouter',            'routes'=>array (                //log error                array (                    'class'=>'fileDailyLogRoute',                    'levels'=>'error, warning',                    'logfile'=>'API_PHP_error.log',                    'keepDays'=>7,                    'logPath'=>'/data/logs/API',                ),//下面两个数组是我自己的配置,上面是公司项目自带的,不必例会

          //请求后在浏览器展示// array (// 'class' => 'CWebLogRoute',// 'showInFireBUG' => true,// 'ignoreAJAXInFireBUG' => true,// 'levels' => 'trace', //级别为trace// 'categorIEs' => 'system.db.*' // //只显示关于数据库信息,包括数据库连接,数据库执行语句// ), array ( 'class' => 'CProfileLogRoute', 'levels' => 'trace', 'showInFireBUG' => true, 'ignoreAJAXInFireBUG' => true, 'categorIEs' => 'system.db.* ' ) ) ),

配置好之后,刷新请求页面就可以了,我这里调试的是API接口,所以看着比较不舒服,没试过web页面打印效果会不会美观些。

我所在公司的二级配置地址是  protected/config/config.API.edaijia.cc            API

'log'=>array(        'class'=>'CLogRouter',        'routes'=>array(            array(                'class'=>'CfileLogRoute',                'levels'=>'error, warning',            ),                           array(                                    'class'=>'CWebLogRoute', //在页面下方输出 主要使用此日志类                                    'categorIEs'=>'system.db.*',//日志分类                                                                   ),                     ),    ),

 

[第二种]

 在yii框架的libs目录下,找到/libs/framework/db/CDbCommand.PHP文件

然后找到两个方法,queryInternal和execute方法​​,编辑方法,echo 出SQL语句。

这里编辑queryInternal方法524行。

 

 echo '<pre>';            echo $this->getText().$par;            print_r($this->_paramLog);

 

 

 

 

 

总结

以上是内存溢出为你收集整理的Yii1打印当前请求所有执行的SQL及耗时全部内容,希望文章能够帮你解决Yii1打印当前请求所有执行的SQL及耗时所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1001624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存