修改 protected/config/main.php (或 config/web.php),在 components.log.routes 添加 CWebLogRoute:
<?php
return [
'components' => [
'log' => [
'class' => 'CLogRouter',
'routes' => [
// 文件日誌 (生產環境建議保留)
[
'class' => 'CFileLogRoute',
'levels' => 'trace, info, error, warning',
'categories' => 'system.*',
'logFile' => 'application.log',
],
// 網頁顯示 SQL (僅開發環境)
[
'class' => 'CWebLogRoute',
'levels' => 'trace', // 關鍵:只捕獲 trace 級別
'categories' => 'system.db.*', // 關鍵:只顯示數據庫相關
'showInFireBug' => false, // 不在 FireBug 顯示
],
],
],
'db' => [
'class' => 'CDbConnection',
'connectionString' => 'mysql:host=localhost;dbname=test',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'enableParamLogging' => true, // 顯示參數綁定值
'enableProfiling' => true, // 啟用性能分析
],
],
];
頁面底部將顯示調試工具欄,包含:
安裝官方擴展:
composer require --dev yiisoft/yii2-debug
配置 config/web.php:
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
'allowedIPs' => ['127.0.0.1', '::1', '192.168.*.*'], // 安全:限制訪問 IP
];
功能更強大:請求時間線、SQL EXPLAIN 分析、郵件預覽、資源佔用圖表、請求重放。
⚠️ 嚴禁在生產環境開啟 CWebLogRoute 或 Yii Debug Toolbar!會洩露 SQL、參數、環境變量、堆疊追蹤等敏感信息,且嚴重影響性能。
CFileLogRoute 記錄錯誤/警告YII_ENV_DEV 環境變量區分配置:<?php
// config/web.php
$config = [...];
if (YII_ENV_DEV) {
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = ['class' => 'yii\debug\Module'];
$config['components']['log']['routes'][] = [
'class' => 'yii\log\FileTarget',
'levels' => ['trace'],
'categories' => ['yii\db\*'],
];
}
return $config;
<?php
// 1. 獲取最後執行的 SQL (含參數綁定)
$sql = Yii::app()->db->getLastSql(); // Yii 1.x
// 或
$sql = Yii::$app->db->getLastSql(); // Yii 2.x
// 2. 開啟 Profiling 獲取詳細信息
Yii::app()->db->enableProfiling = true;
// ... 執行查詢 ...
$profiles = Yii::app()->db->getProfiles();
foreach ($profiles as $profile) {
echo "SQL: {$profile->query}\n";
echo "耗時: {$profile->duration} 秒\n";
echo "參數: " . print_r($profile->params, true) . "\n";
}
// 3. 直接在 SQL 中輸出調試 (臨時)
$users = User::model()->findAllBySql('SELECT * FROM user WHERE id = :id', [':id' => 1]);
levels => 'trace'、categories => 'system.db.*'、enableParamLogging => true、YII_DEBUG 常量定義enableParamLogging => true (Yii 1.x) 或 enableProfiling => true (Yii 2.x)