首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Yii Framework 教程 (3):整合日誌功能,掌握 CLogRouter 與多種輸出路由

     編輯:PHP 綜合知識

為什麼需要日誌?

開發除錯、上線監控、安全審計皆仰賴日誌。Yi i 內建 CLogRouter,支援檔案、郵件、資料庫、FirePHP 等多種路由,用法類似 log4j/log4net。

核心組件一覽

除 log 外,Yii 預定義 18 個核心組件(如 db、cache、request、user、errorHandler 等),均可透過 components 配置客製化。

實作步驟:檔案日誌

1. 建立配置檔

<?php
// protected/config/main.php
return array(
    'preload' => array('log'), // 預載入 log 組件
    'components' => array(
        'log' => array(
            'class' => 'CLogRouter',
            'routes' => array(
                array(
                    'class' => 'CFileLogRoute',
                    'levels' => 'info, error, warning',
                    'categories' => 'system.*', // 可選:過濾類別
                    'logPath' => '', // 預設 protected/runtime
                    'logFile' => 'application.log',
                    'maxFileSize' => 1024, // KB
                    'maxLogFiles' => 5,
                ),
            ),
        ),
    ),
);

2. 修改入口腳本載入配置

<?php
$yii = 'C:/yiiframework/yii.php';
defined('YII_DEBUG') or define('YII_DEBUG', true);
$config = dirname(__FILE__) . '/protected/config/main.php';
require_once($yii);
Yii::createWebApplication($config)->run();

3. 建立 runtime 目錄並設定權限

mkdir protected/runtime
chmod 777 protected/runtime  # Linux/Unix 確保可寫

若目錄不存在或不可寫,Yii 會直接將日誌輸出到網頁。

記錄日誌的兩種方式

方法用途說明
Yii::log($msg, $level, $category)一般記錄手動記錄業務邏輯、除錯資訊
Yii::trace($msg, $category)追蹤記錄僅在 YII_DEBUG=true 時記錄,適合開發階段流程追蹤

範例

<?php
// 控制器中
public function actionLogin() {
    Yii::trace('開始登入流程', 'auth');
    if ($model->validate()) {
        Yii::log('用戶登入成功: ' . $model->username, 'info', 'auth.login');
        // ...
    } else {
        Yii::log('登入驗證失敗', 'warning', 'auth.login');
    }
}

其他常用路由

  • CEmailLogRoute:錯誤郵件通知管理員
  • CDbLogRoute:寫入資料庫表,便於查詢分析
  • CWebLogRoute:頁面底部直接顯示(開發環境適用)
  • CFireLogRoute:FirePHP 瀏覽器主控台顯示

最佳實踐建議

  1. 生產環境關閉 YII_DEBUG,僅記錄 error, warning
  2. 使用有意義的 category(如 auth、db、api.payment)便於過濾
  3. 定期輪轉日誌檔案,避免佔滿磁碟
  4. 關鍵業務流程務必記錄 info 層級
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved