《PHP應(yīng)用:詳解PHP的Yii框架中日志的相關(guān)配置及使用》要點(diǎn):
本文介紹了PHP應(yīng)用:詳解PHP的Yii框架中日志的相關(guān)配置及使用,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:YII框架
PHP應(yīng)用默認(rèn)的日志是輸出到protected/runtime/application.log
PHP應(yīng)用如果需要修改那么需要在main.php里面的 components 下面增加log配置,如下:
PHP應(yīng)用
'preload' => array('log'),//這句也必須加上
'components' => array(
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
//這是一個(gè)文件route表示category為test開頭的所有類型的輸出都會(huì)記錄到runtime/test.log下面
array(
'class'=>'CFileLogRoute',
'levels'=>'trace, info, debug, warn, error, fatal, profile',
'categories'=>'test.*',
'maxFileSize'=>1048576,//單文件最大1G
'logFile'=>'test.log',
),
//
// 開發(fā)過程中所有日志直接輸出到瀏覽器了,這樣不需要登錄服務(wù)器看日志了
array(
'class' => 'CWebLogRoute',
'categories' => 'test.*',
'levels' => CLogger::LEVEL_PROFILE,
'showInFireBug' => true,
'ignoreAjaxInFireBug' => true,
),
array(
'class' => 'CWebLogRoute',
'categories' => 'test.* ',
),
array(
'class'=>'CEmailLogRoute',
'levels'=>'error, warning',
'emails'=>'admin@example.com',
),
),
),
),
PHP應(yīng)用這個(gè)log首先被記錄在了內(nèi)存中一個(gè)CLogger類的array中,然后會(huì)逐一的判斷每個(gè)LogRoute,判斷是否需要輸出,注意是逐一判斷,不是其中一個(gè)輸出下一個(gè)就不管了.
PHP應(yīng)用拿上面的配置來說:
PHP應(yīng)用第一個(gè)CFileLogRoute,'categories'=>'test.*',levels里包括了info, test.xx滿足條件,所以會(huì)執(zhí)行,將這條log輸出到test.log中,然后下一個(gè)CWebLogRoute, 'levels' => CLogger::LEVEL_PROFILE,.而這條log是info的,所以不會(huì)執(zhí)行,再下一個(gè)CWebLogRoute,'categories' => 'test.* ',levels沒指定,那就說不過濾,所以這個(gè)也會(huì)被執(zhí)行,所以這條log將被輸出到瀏覽器中.
PHP應(yīng)用二、profile功能
另外logger還有一個(gè)很強(qiáng)大的功能:profile,
PHP應(yīng)用
Yii::beginProfile('blockID');
...code block being profiled...
Yii::endProfile('blockID');
PHP應(yīng)用這樣就能測(cè)試這個(gè)code block的執(zhí)行效率了,非常的方便啊.
PHP應(yīng)用更詳細(xì)的配置查看:http://www.yiiframework.com/doc/api/1.1/CProfileLogRoute
PHP應(yīng)用然后還有一個(gè)很BUG的功能,Profiling SQL Executions
PHP應(yīng)用很多時(shí)候sql語句寫的不好會(huì)非常影響效率的,但是要確定哪一條語句影響了效率就需要profiling了.YII也提供了這個(gè)bug級(jí)別的功能.
PHP應(yīng)用三、Yii::log()和Yii::trace()的使用
首先在config文件中設(shè)置log
PHP應(yīng)用
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',//這表示把日志輸出到文件中,下方有詳細(xì)的
'levels'=>'error, warning',
),
array(
'class'=>'CWebLogRoute',//這表示把日志顯示在網(wǎng)頁下方,下方有詳細(xì)的
'levels'=>'trace, info, error, warning',
'categories'=>'cool.*,system.db.*',
),
),
),
PHP應(yīng)用
日志路由class:
PHP應(yīng)用信息級(jí)別levels:
PHP應(yīng)用分類categories:
PHP應(yīng)用可以自定義,但在輸出函數(shù)里要對(duì)應(yīng)才會(huì)被寫入日志里
(例如上邊寫的是 cool.* 和 system.db.* ,就會(huì)把相應(yīng)分類的信息寫入日志,請(qǐng)結(jié)合下文來理解)
PHP應(yīng)用設(shè)置完了,就可以用寫入日志的函數(shù)來記錄了:
PHP應(yīng)用
Yii::trace('My log message.','cool.pd');
//cool.pd屬于cool.*分類,所以會(huì)被寫入日志
Yii::log('My log message.','info','cool.collectpd');
//log定義級(jí)別為info,結(jié)合上文,第一個(gè)logclass會(huì)忽略,不會(huì)被寫入文件,但會(huì)被第二個(gè)logclass接收,寫入日志在網(wǎng)絡(luò)下方顯示.
PHP應(yīng)用
trace()和log()的區(qū)別:
trace()只會(huì)在調(diào)試模式下生效,即開啟debug的時(shí)候
trace()不分level,但log()能設(shè)置levels參數(shù)
PHP應(yīng)用
四、調(diào)試sql query每個(gè)語句執(zhí)行的耗時(shí)
在配置中的log下加上下面這個(gè)Route
PHP應(yīng)用
//這個(gè)配置專門負(fù)責(zé)數(shù)據(jù)庫操作的profile
array(
'class'=>'CProfileLogRoute',
'levels' => CLogger::LEVEL_PROFILE,
'showInFireBug' => true,
'ignoreAjaxInFireBug' => true,
'categories' => 'system.db.* ', //只記錄db的操作日志,其他的忽略
),
PHP應(yīng)用然后在某個(gè)controller的某個(gè)action中加入:
PHP應(yīng)用
Yii::beginProfile('db', 'pocketpet');
for($i=0;$i<1000;$i++){
$user = UserModel::model()->findByPk("1");//這里只要是數(shù)據(jù)庫操作就行,這個(gè)只是個(gè)例子
}
PHP應(yīng)用Yii::endProfile('db', 'pocketpet');
PHP應(yīng)用在瀏覽器中拜訪這個(gè)action,記得先打開firebug,然后firebug中就能看到如下圖的記錄:
PHP應(yīng)用
PHP應(yīng)用相同的query會(huì)進(jìn)行歸類,計(jì)算total和average,這個(gè)對(duì)于分析還是非常有贊助的.
PHP應(yīng)用也可以將db的日志寫到文件,配置如下(不建議使用,還是到瀏覽器用firebug方便):
PHP應(yīng)用
array(
'class'=>'CFileLogRoute',
'levels' => CLogger::LEVEL_PROFILE,
'categories' => 'system.db.* ', //只記錄db的操作日志,其他的忽略
'logFile'=>'db.log',
),
PHP應(yīng)用當(dāng)然,想要生效還得有下面兩步配置:
PHP應(yīng)用1 . 記得在index.php, 中加入以下配置
PHP應(yīng)用
$yii = dirname(__FILE__).'/../yii/framework/yii.php';
$config = dirname(__FILE__).'/protected/config/main.php';
defined('YII_DEBUG') or define('YII_DEBUG',true);
defined('YII_DEBUG_SHOW_PROFILER') or define('YII_DEBUG_SHOW_PROFILER',true);
//enable profiling
defined('YII_DEBUG_PROFILING') or define('YII_DEBUG_PROFILING',true);
//trace level
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
//execution time
defined('YII_DEBUG_DISPLAY_TIME') or define('YII_DEBUG_DISPLAY_TIME',false);
require_once($yii);
Yii::createWebApplication($config)->run();
PHP應(yīng)用2. 在main.php主配置文件里面,的components db 里將enableProfiling設(shè)置為true
PHP應(yīng)用
'components' => array(
'db' => array(
'enableProfiling' => true, //這個(gè)是用來記錄日志的,會(huì)記錄每一條語句執(zhí)行的時(shí)間
'enableParamLogging' => true,//true表示包含sql語句的參數(shù)在內(nèi)的信息都會(huì)記錄到日志里,非常詳細(xì)
),
)
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP應(yīng)用:詳解PHP的Yii框架中日志的相關(guān)配置及使用》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/8283.html