在開發應用的過程中,調試也是非常重要的一個環節,除了IDE支援的即時調試(如VS.PHP或IDE支援的調試功能),為Web應用添加適當的調試信息也是非常有用的一個方法,開發過Java或.Net 應用的對log4XX都不陌生,Yii Framework中也提供了類似的Log功能, Yii::log,它是作為CWebApplication一個內建的元件出現的。可以透過設定檔來設定(Yii中設定通常為 protected/config/main.php)。
上篇文章Yii Framework 開發簡明教學(2) Yii Web應用基礎簡述了應用元件。
除Log元件外,Yii 預先定義了一系列核心應用元件,提供常見 Web 應用中所使用的功能。例如, request 元件用於解析使用者請求 並提供例如 URL,cookie 等資訊。 透過配置這些核心元件的屬性,我們可以在幾乎所有的方面修改Yii 的預設行為。
下面我們列出了由 CWebApplication 預先定義的核心元件。
assetManager: CAssetManager - 管理私有資源檔案的發布。
authManager: CAuthManager - 管理角色為基礎的存取控制 (RBAC)。
cache: CCache - 提供資料快取功能。注意, 你必須指定實際的類別(例如CMemCache, CDbCache)。 否則,當你存取此元件時將傳回 NULL。
clientScript: CClientScript - 管理客戶端腳本 (javascripts 和 CSS).
coreMessages: CPhpMessageSource - 提供 Yii 框架用到的 核心資訊的翻譯。
db: CDbConnection - 提供資料庫連線。注意,使用此元件你必須配置其 connectionString 屬性。
errorHandler: CErrorHandler - 處理未捕獲的 PHP 錯誤和異常。
format: CFormatter - 格式化數值顯示。此 功能從版本 1.1.0 起開始提供。
messages: CPhpMessageSource - 提供Yii應用中使用的資訊翻譯。
request: CHttpRequest - 提供關於使用者請求的資訊。
securityManager: CSecurityManager - 提供安全相關的服務,例如雜湊, 加密。
session: CHttpSession - 提供session相關的功能。
statePersister: CStatePersister - 提供全局狀 態持久方法。
urlManager: CUrlManager - 提供 URL 解析和建立相關功能
user: CWebUser - 提供目前使用者的識 別資訊。
themeManager: CThemeManager - 管理主題。這些組件將在後面的教學中逐步介紹。以下給出Log功能使用的基底 本方法:這裡我們修改Yii Framework 開發簡明教學(1) 第一個應用Hello World。為其添加日誌。 1. 建立設定檔protected/config/main.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 所記錄的資訊是保存在記憶體中的。 我們通常需要將它們顯示到 瀏覽器視窗中,或將他們保存到一些 持久性儲存例如文件、Email中。這個就叫作 訊息路由。
一般使用Log功能時,需要預 先載入Log元件,這是透過preload來設定的,preload 允許應用事先載入一些模組.提示: 預設情況下,應用元件是根據需要而 建立的。這意味著一個元件只有在被存取的情況下才會被建立。 因此,系統的整體效能不會因為配置了許多元件而下降。有些應 用元件,(例如CLogRouter) 是不管用不用都要建立的。在這種情況下, 我們在應用程式的設定檔裡將這些元件的ID欄位上: preload。
2. 修改入口腳本index.php ,設定主應用實例使用新建立的設定檔。
$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. 创建protected/runtime
因為日誌檔案寫入的預設目錄為 protected/runtime 所以事先要建立好runtime 目錄,否則Yii 將日誌直接顯示在網頁上。
4. 這樣就可以使用 Yii::log 或 Yii::trace 為應用程式新增日誌。
其 區別是後者只在當應用程式運行在 調試模式(debug mode) 中時才會記 錄資訊。
Yii::log($message, $level, $category); Yii::trace($message, $category);
當記錄資訊時,我 們需要指定它的分類和等級 分類是一段格式類似於 路徑別名 的字串。 例如,如果一則資訊是在 CController 中記錄的, 我們可以使用 system.web.CController 作為分類。資訊等級應該是下列值中的一種:
trace: 這是在 Yii::trace 中使用的 等級。它用於在開發中 追蹤程式的執行流程。
info: 這個用來記錄普通的資訊。
profile: 這個是效能概述(profile) 。下面馬上會有更詳細的說明。
warning: 這個用於警告(warning)訊息。
error: 這個用於致命錯誤(fatal error)信 息。
Yii 的日誌透過Level和Category進行分類和過濾,正如我們所提到的, 多個等級或分類應使用逗號連接。
由于 信息分类是类似 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. 运行应用,可以看到Yii在protected/runtime 创建了一个application.log
其内容如下:
2012/12/11 21:23:38 [info] [site.action] action
注: 日志存放的位置和文件名都可以通过配置来修改,一般情 况使用缺省值就可以了,和log4X 类似,应用的日志可以通过路由同时写到多个目的地(文件,Email等)这些多可以通过配置 来实现,具体可以参见日志记录。
以上就是PHP开发框架Yii Framework教程(3) 为应用添加日志的内容,更多相关内容请关注PHP中文网(www.php.cn)!