Yii1打印當前請求所有執行的SQL及耗時


我們在熟悉新的項目了解業務的時候,可以有很多方式。看項目文檔說明;和了解項目身邊的人溝通;通過自己度代碼調試,但是一步步調試打印語句或許有點慢,如果可以調出當前請求的所有語句,那么很快可以熟悉他的業務。再或者自己開發中排查問題。

公司所用的框架是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);

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM