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

2022-03-22 23:48:12 字數 3176 閱讀 5978

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

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

如果需要修改那麼需要在main.php裡面的components下面增加log配置,如下:

'

preload

' => array('

log'),//

這句也必須加上

在 yii 中,有下列幾種日誌路由可用:

cdblogroute: 將資訊儲存到資料庫的表中。

cemaillogroute: 傳送資訊到指定的 email 位址。

cfilelogroute: 儲存資訊到應用程式 runtime 目錄中的乙個檔案中。

cweblogroute: 將 資訊 顯示在當前頁面的底部。

cprofilelogroute: 在頁面的底部顯示概述(profiling)資訊。

'

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

在頁面下方輸出 主要使用此日誌類

'categories

'=>'

system.db.*

',//

日誌分類

[第二種]

在yii框架的libs目錄下,找到/libs/framework/db/cdbcommand.php檔案

然後找到兩個方法,queryinternal和execute方法​​,編輯方法,echo 出sql語句。

這裡編輯queryinternal方法524行。

12 列印 1 到最大的 n 位數

題目 輸入數字 n,按順序列印出從 1 到 最大的 n 位十進位制數。比如輸入 3 則列印出 1 2 3 一直到最大的3位數即 999。解析 容易知道不能用 int 等數字型別表示 大數問題 關鍵點 1.如何用字串表示n位數?2.如何實現字串數的自增操作?3.如何列印乙個字串數?申請長度是n 1的字...

12 列印1到最大的n位數

輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,列印出1,2,3一直到最大的3位數即999.n的取值範圍可以很大,考慮大數問題。最常見的方法是用字串或者數字表達大數。把問題轉換成數字排列問題。思考 如何用字串儲存數字 如何在字串表達的數字上模擬加法 把字串表達是數字列印出來 incl...

17 列印從1到最大的n位數

輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數999。示例 1 輸入 n 1 輸出 1,2,3,4,5,6,7,8,9 說明 題目要求列印 從1至最大的n位數的列表 因此需考慮以下兩個問題 最大的n位數 記為end 和位數n的關係 例如最大的1位...