鍍金池/ 教程/ PHP/ Yii Framework 開發(fā)教程(3) 為應(yīng)用添加日志
Yii Framework 開發(fā)教程(16) UI 組件 StarRating 示例
Yii Framework 開發(fā)教程(2) Yii Web 應(yīng)用基礎(chǔ)
Yii Framework 開發(fā)教程(19) UI 組件 TreeView 示例
Yii Framework 開發(fā)教程(39) Zii 組件-Slider 示例
Yii Framework 開發(fā)教程(45) Zii 組件-Selectable 示例
Yii Framework 開發(fā)教程(44) Zii 組件-Resizable 示例
Yii Framework 開發(fā)教程(8) 使用 FormModel
Yii Framework 開發(fā)教程(42) Zii 組件-Draggable 示例
Yii Framework 開發(fā)教程(18) UI 組件 TextHighlighter 示例
Yii Framework 開發(fā)教程(32) Zii 組件-GridView 示例
Yii Framework 開發(fā)教程(30) Zii 組件-ListView 示例
Yii Framework 開發(fā)教程(9) UI 組件 Widget 概述
Yii Framework 開發(fā)教程(17) UI 組件 TabView 示例
Yii Framework 開發(fā)教程(24) 數(shù)據(jù)庫-DAO 示例
Yii Framework 開發(fā)教程(25) 數(shù)據(jù)庫-Query Builder 示例
Yii Framework 開發(fā)教程(21) UI 組件 自定義 Captcha 示例
Yii Framework 開發(fā)教程(38) Zii 組件-ProgressBar 示例
Yii Framework 開發(fā)教程(20) UI 組件 Captcha 示例
Yii Framework 開發(fā)教程(14) UI 組件 MaskedTextField 示例
Yii Framework 開發(fā)教程(22) UI 組件 Zii 組件簡介
Yii Framework 開發(fā)教程(31) Zii 組件-DetailView 示例
Yii Framework 開發(fā)教程(33) Zii 組件-Accordion 示例
Yii Framework 開發(fā)教程(36) Zii 組件-DatePicker 示例
Yii Framework 開發(fā)教程(6) CComponent 組件
Yii Framework 開發(fā)教程(37) Zii 組件-Dialog 示例
Yii Framework 開發(fā)教程(26) 數(shù)據(jù)庫-Active Record 示例
Yii Framework 開發(fā)教程(29) Zii組件-Menu 示例
Yii Framework 開發(fā)教程(46) Zii 組件-Sortable 示例
Yii Framework 開發(fā)教程(10) UI 組件 自定義組件
Yii Framework 開發(fā)教程(11) UI 組件 ActiveForm 示例
Yii Framework 開發(fā)教程(43) Zii 組件-Droppable 示例
Yii Framework 開發(fā)教程(27) 數(shù)據(jù)庫-關(guān)聯(lián) Active Record 示例
Yii Framework 開發(fā)教程(47) 主題 Theme 示例
Yii Framework 開發(fā)教程(48) 多國語言示例
Yii Framework 開發(fā)教程(35) Zii 組件-Button 示例
Yii Framework 開發(fā)教程(3) 為應(yīng)用添加日志
Yii Framework 開發(fā)教程(23) 數(shù)據(jù)庫-概述
Yii Framework 開發(fā)教程(12) UI 組件 ClipWidget 示例
Yii Framework 開發(fā)教程(41) Zii 組件-Tabs 示例
Yii Framework 開發(fā)教程(34) Zii 組件-AutoComplete 示例
Yii Framework 開發(fā)教程(40) Zii 組件-SliderInput 示例
Yii Framework 開發(fā)教程(5) URL 管理
Yii Framework 開發(fā)教程(4) Hangman 猜單詞游戲?qū)嵗?/span>
Yii Framework 開發(fā)教程(15) UI 組件 MultiFileUpload 示例
Yii Framework 開發(fā)教程(7) 使用 CHtml 創(chuàng)建 Form
Yii Framework 開發(fā)教程(28) Data Provider 簡介
Yii Framework 開發(fā)教程(1) 第一個應(yīng)用 Hello World
Yii Framework 開發(fā)教程(13) UI 組件 ContentDecorator 示例

Yii Framework 開發(fā)教程(3) 為應(yīng)用添加日志

在開發(fā)應(yīng)用的過程中,調(diào)試也是非常重要的一個環(huán)節(jié),除了 IDE 支持的即時調(diào)試(如 VS.PHP 或 IDE 支持的調(diào)試功能),給 Web 應(yīng)用添加適當?shù)恼{(diào)試信息也是非常有用的一個方法,開發(fā)過 Java 或.Net 應(yīng)用的對 log4XX 都不陌生,Yii Framework 中也提供了類似的 Log 功能, Yii::log,它是作為 CWebApplication 一個內(nèi)置的組件出現(xiàn)的??梢酝ㄟ^配置文件來配置(Yii 中配置通常為 protected/config/main.php)。

上篇文章 Yii Framework 開發(fā)簡明教程(2) Yii Web應(yīng)用基礎(chǔ)簡述了應(yīng)用組件。

除 Log 組件外,Yii 預(yù)定義了一系列核心應(yīng)用組件,提供常見 Web 應(yīng)用中所用的功能。例如, request 組件用于解析用戶請求并提供例如 URL,cookie 等信息。 通過配置這些核心組件的屬性,我們可以在幾乎所有的方面修改 Yii 的默認行為。

下面我們列出了由 CWebApplication 預(yù)定義的核心組件。

這些組件在后面的教程中將逐步介紹。下面給出 Log 功能使用的基本方法:這里我們修改 Yii Framework 開發(fā)簡明教程(1) 第一個應(yīng)用Hello World。為其添加日志。

1.創(chuàng)建配置文件 protected/config/main.php

希望將日志寫到一個文件中,可以使用如下配置:

    <?php

    // This is the main Web application configuration. Any writable

    // CWebApplication properties can be configured here.

    return array(

    // preloading 'log' component
    'preload'=>array('log'),
    // application components

    'components'=>array(

        'log'=>array(

            'class'=>'CLogRouter',

            'routes'=>array(
                array(
                    'class'=>'CFileLogRoute',
                    'levels'=>'info,error, warning',
                    ),

                ),
            ),
        ),

    );

CLogRouter 信息路由 通過 Yii::log 或 Yii::trace 記錄的信息是保存在內(nèi)存中的。 我們通常需要將它們顯示到瀏覽器窗口中,或者將他們保存到一些 持久存儲例如文件、Email 中。這個就叫作信息路由。 一般使用 Log 功能時,需要預(yù)先載入 Log 組件,這是通過 preload 來配置的,preload 允許應(yīng)用事先載入一些模塊.提示: 默認情況下,應(yīng)用元件是根據(jù)需要而創(chuàng)建的。這意味著一個元件只有在被訪問的情況下才會創(chuàng)建。 因此,系統(tǒng)的整體性能不會因為配置了很多元件而下降。有些應(yīng)用元件,(比如 CLogRouter) 是不管用不用都要創(chuàng)建的。在這種情況下, 我們在應(yīng)用的配置文件里將這些元件的 ID 列上:preload。

2.修改入口腳本 index.php ,配置主應(yīng)用實例使用新創(chuàng)建的配置文件。

    $yii='C:/yiiframework/yii.php';
    // remove the following line when in production mode
    defined('YII_DEBUG') or define('YII_DEBUG',true);

    $config=dirname(__FILE__).'/protected/config/main.php';

    require_once($yii);
    Yii::createWebApplication($config)->run();

3.創(chuàng)建 protected/runtime

4.這樣就可以使用 Yii::log 或 Yii::trace 為應(yīng)用添加日志。

其區(qū)別是后者只在當應(yīng)用程序運行在 調(diào)試模式(debug mode) 中時才會記錄信息。

    Yii::log($message, $level, $category);
    Yii::trace($message, $category);

當記錄信息時,我們需要指定它的分類和級別 分類是一段格式類似于 路徑別名 的字符串。 例如,如果一條信息是在 CController 中記錄的,我們可以使用 system.web.CController 作為分類。信息級別應(yīng)該是下列值中的一種:

  • trace: 這是在 Yii::trace 中使用的級別。它用于在開發(fā)中 跟蹤程序的執(zhí)行流程。
  • info: 這個用于記錄普通的信息。
  • profile: 這個是性能概述(profile)。下面馬上會有更詳細的說明。
  • warning: 這個用于警告(warning)信息。
  • error: 這個用于致命錯誤(fatal error)信息。

Yii 的日志通過 Level 和 Category 進行分類和過濾,正如我們所提到的, 多個級別或分類應(yīng)使用逗號連接。 由于信息分類是類似 xxx.yyy.zzz 格式的,我們可以將其視為一個分類層級。 具體地,我們說 xxx 是 xxx.yyy 的父級,而 xxx.yyy 又是 xxx.yyy.zzz 的父級。 這樣我們就可以使用 xxx.* 表示分類 xxx 及其所有的子級和孫級分類。

有了以上知識,我們修改 SiteController 的 actionIndex,添加一行日志。

    public function actionIndex()
    {
        Yii::log("action","info","site.action");
         $this->render("index");
    }

5.運行應(yīng)用,可以看到 Yii 在 protected/runtime 創(chuàng)建了一個 application.log

http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/3.1.jpg" alt="picture3.1" />

其內(nèi)容如下: 2012/12/11 21:23:38 [info] [site.action] action

注: 日志存放的位置和文件名都可以通過配置來修改,一般情況使用缺省值就可以了,和 log4X 類似,應(yīng)用的日志可以通過路由同時寫到多個目的地(文件,Email 等)這些多可以通過配置來實現(xiàn),具體可以參見日志記錄。