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

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

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

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

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

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

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

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

希望將日志寫(xiě)到一個(gè)文件中,可以使用如下配置:

    <?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 信息路由 通過(guò) Yii::log 或 Yii::trace 記錄的信息是保存在內(nèi)存中的。 我們通常需要將它們顯示到瀏覽器窗口中,或者將他們保存到一些 持久存儲(chǔ)例如文件、Email 中。這個(gè)就叫作信息路由。 一般使用 Log 功能時(shí),需要預(yù)先載入 Log 組件,這是通過(guò) preload 來(lái)配置的,preload 允許應(yīng)用事先載入一些模塊.提示: 默認(rèn)情況下,應(yīng)用元件是根據(jù)需要而創(chuàng)建的。這意味著一個(gè)元件只有在被訪問(wèn)的情況下才會(huì)創(chuàng)建。 因此,系統(tǒng)的整體性能不會(huì)因?yàn)榕渲昧撕芏嘣陆?。有些?yīng)用元件,(比如 CLogRouter) 是不管用不用都要?jiǎng)?chuàng)建的。在這種情況下, 我們?cè)趹?yīng)用的配置文件里將這些元件的 ID 列上:preload。

2.修改入口腳本 index.php ,配置主應(yīng)用實(shí)例使用新創(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ū)別是后者只在當(dāng)應(yīng)用程序運(yùn)行在 調(diào)試模式(debug mode) 中時(shí)才會(huì)記錄信息。

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

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

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

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

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

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

5.運(yùn)行應(yīng)用,可以看到 Yii 在 protected/runtime 創(chuàng)建了一個(gè) 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

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