欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解PHP的Yii框架中日志的相關(guān)配置及使用

 更新時(shí)間:2015年12月08日 15:42:17   作者:SOULDAK  
這篇文章主要介紹了PHP的Yii框架中日志的相關(guān)配置及使用,包括bug追蹤以及數(shù)據(jù)庫(kù)查詢(xún)耗時(shí)記錄等,需要的朋友可以參考下

默認(rèn)的日志是輸出到protected/runtime/application.log

如果需要修改那么需要在main.php里面的 components 下面增加log配置,如下:

'preload' => array('log'),//這句也必須加上

'components' => array( 
    'log'=>array( 
      'class'=>'CLogRouter', 
      'routes'=>array(
        //這是一個(gè)文件route表示category為test開(kāi)頭的所有類(lèi)型的輸出都會(huì)記錄到runtime/test.log下面 
         array( 
           'class'=>'CFileLogRoute', 
           'levels'=>'trace, info, debug, warn, error, fatal, profile', 
           'categories'=>'test.*', 
           'maxFileSize'=>1048576,//單文件最大1G 
           'logFile'=>'test.log', 
         ), 
         // 
 
//        開(kāi)發(fā)過(guò)程中所有日志直接輸出到瀏覽器了,這樣不需要登錄服務(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', 
        ), 
      ), 
    ), 
 
  ),


如果在某處調(diào)用了Yii::log("jdkshgds","info",'test.xx');

這個(gè)log首先被記錄在了內(nèi)存中一個(gè)CLogger類(lèi)的array中,然后會(huì)逐一的判斷每個(gè)LogRoute,判斷是否需要輸出,注意是逐一判斷,不是其中一個(gè)輸出下一個(gè)就不管了。

拿上面的配置來(lái)說(shuō):

第一個(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沒(méi)指定,那就說(shuō)不過(guò)濾,所以這個(gè)也會(huì)被執(zhí)行,所以這條log將被輸出到瀏覽器中。

二、profile功能
另外logger還有一個(gè)很強(qiáng)大的功能:profile,

Yii::beginProfile('blockID');
...code block being profiled...
Yii::endProfile('blockID');

這樣就能測(cè)試這個(gè)code block的執(zhí)行效率了,非常的方便啊。

更詳細(xì)的配置查看:http://www.yiiframework.com/doc/api/1.1/CProfileLogRoute

然后還有一個(gè)很BUG的功能,Profiling SQL Executions

很多時(shí)候sql語(yǔ)句寫(xiě)的不好會(huì)非常影響效率的,但是要確定哪一條語(yǔ)句影響了效率就需要profiling了。YII也提供了這個(gè)bug級(jí)別的功能。

三、Yii::log()和Yii::trace()的使用
首先在config文件中設(shè)置log

'log'=>array(
  'class'=>'CLogRouter',
  'routes'=>array(
    array(
      'class'=>'CFileLogRoute',//這表示把日志輸出到文件中,下方有詳細(xì)的
      'levels'=>'error, warning',
    ),
    array(
      'class'=>'CWebLogRoute',//這表示把日志顯示在網(wǎng)頁(yè)下方,下方有詳細(xì)的
      'levels'=>'trace, info, error, warning',
      'categories'=>'cool.*,system.db.*',
    ),
  ),
),


日志路由class:

  • CDbLogRoute: 將信息保存到數(shù)據(jù)庫(kù)的表中。
  • CEmailLogRoute: 發(fā)送信息到指定的 Email 地址。
  • CFileLogRoute: 保存信息到應(yīng)用程序 runtime 目錄中的一個(gè)文件中。
  • CWebLogRoute: 將 信息 顯示在當(dāng)前頁(yè)面的底部。
  • CProfileLogRoute: 在頁(yè)面的底部顯示概述(profiling)信息。

信息級(jí)別levels:

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

分類(lèi)categories:

可以自定義,但在輸出函數(shù)里要對(duì)應(yīng)才會(huì)被寫(xiě)入日志里
(例如上邊寫(xiě)的是 cool.* 和 system.db.* ,就會(huì)把相應(yīng)分類(lèi)的信息寫(xiě)入日志,請(qǐng)結(jié)合下文來(lái)理解)

設(shè)置完了,就可以用寫(xiě)入日志的函數(shù)來(lái)記錄了:

Yii::trace('My log message.','cool.pd');
//cool.pd屬于cool.*分類(lèi),所以會(huì)被寫(xiě)入日志
Yii::log('My log message.','info','cool.collectpd');
//log定義級(jí)別為info,結(jié)合上文,第一個(gè)logclass會(huì)忽略,不會(huì)被寫(xiě)入文件,但會(huì)被第二個(gè)logclass接收,寫(xiě)入日志在網(wǎng)絡(luò)下方顯示。


trace()和log()的區(qū)別:
trace()只會(huì)在調(diào)試模式下生效,即開(kāi)啟debug的時(shí)候
trace()不分level,但log()能設(shè)置levels參數(shù)


四、調(diào)試sql query每個(gè)語(yǔ)句執(zhí)行的耗時(shí)
在配置中的log下加上下面這個(gè)Route

//這個(gè)配置專(zhuān)門(mén)負(fù)責(zé)數(shù)據(jù)庫(kù)操作的profile 
array( 
    'class'=>'CProfileLogRoute', 
    'levels' => CLogger::LEVEL_PROFILE, 
    'showInFireBug' => true, 
    'ignoreAjaxInFireBug' => true, 
    'categories' => 'system.db.* ', //只記錄db的操作日志,其他的忽略 
),

然后在某個(gè)controller的某個(gè)action中加入:

Yii::beginProfile('db', 'pocketpet'); 
for($i=0;$i<1000;$i++){ 
   $user = UserModel::model()->findByPk("1");//這里只要是數(shù)據(jù)庫(kù)操作就行,這個(gè)只是個(gè)例子 
}

Yii::endProfile('db', 'pocketpet');

在瀏覽器中訪問(wèn)這個(gè)action,記得先打開(kāi)firebug,然后firebug中就能看到如下圖的記錄:

2015128153707541.jpg (600×83)

相同的query會(huì)進(jìn)行歸類(lèi),計(jì)算total和average,這個(gè)對(duì)于分析還是非常有幫助的。

也可以將db的日志寫(xiě)到文件,配置如下(不建議使用,還是到瀏覽器用firebug方便):

array( 
  'class'=>'CFileLogRoute', 
  'levels' => CLogger::LEVEL_PROFILE, 
  'categories' => 'system.db.* ', //只記錄db的操作日志,其他的忽略 
  'logFile'=>'db.log', 
),

當(dāng)然,想要生效還得有下面兩步配置:

1 . 記得在index.php, 中加入以下配置

$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();

2. 在main.php主配置文件里面,的components db 里將enableProfiling設(shè)置為true

'components' => array(
'db' => array(
    'enableProfiling' => true, //這個(gè)是用來(lái)記錄日志的,會(huì)記錄每一條語(yǔ)句執(zhí)行的時(shí)間
    'enableParamLogging' => true,//true表示包括sql語(yǔ)句的參數(shù)在內(nèi)的信息都會(huì)記錄到日志里,非常詳細(xì)
  ),
)

相關(guān)文章

  • php寫(xiě)app用的框架整理

    php寫(xiě)app用的框架整理

    在本篇文章里小編給大家整理的是關(guān)于php寫(xiě)app用的框架的相關(guān)知識(shí)點(diǎn),有需要的朋友們學(xué)習(xí)下。
    2019-09-09
  • PHP結(jié)構(gòu)型模式之外觀模式

    PHP結(jié)構(gòu)型模式之外觀模式

    這篇文章主要介紹了PHP結(jié)構(gòu)型模式之外觀模式,外觀模式是一種結(jié)構(gòu)型模式,它提供了一個(gè)簡(jiǎn)單的接口,隱藏了系統(tǒng)的復(fù)雜性,為客戶(hù)端提供了一個(gè)簡(jiǎn)單的入口點(diǎn)
    2023-04-04
  • php解析http獲取的json字符串變量總是空白null

    php解析http獲取的json字符串變量總是空白null

    這篇文章主要介紹了php解析http獲取的json字符串變量總是空白null的解決方法,個(gè)人經(jīng)驗(yàn)的總結(jié),這里推薦給大家。
    2015-03-03
  • 檢查url鏈接是否已經(jīng)有參數(shù)的php代碼 添加 ? 或 &

    檢查url鏈接是否已經(jīng)有參數(shù)的php代碼 添加 ? 或 &

    有時(shí)候我們需要檢查 URL 鏈接是否已經(jīng)有參數(shù),然后根據(jù)需要判斷是添加 ? 還是添加 & 在結(jié)尾,這只是一個(gè)很小的技巧,但是在做分頁(yè)或者頁(yè)面跳轉(zhuǎn)時(shí)還是有些用處的。
    2010-02-02
  • PHP入門(mén)教程之操作符與控制結(jié)構(gòu)流程詳解

    PHP入門(mén)教程之操作符與控制結(jié)構(gòu)流程詳解

    這篇文章主要介紹了PHP入門(mén)教程之操作符與控制結(jié)構(gòu)流程,結(jié)合實(shí)例形式詳細(xì)分析了php基本的賦值、自增、比較、三目運(yùn)算符以及if語(yǔ)句、switch語(yǔ)句、for語(yǔ)句等流程控制語(yǔ)句的使用技巧,需要的朋友可以參考下
    2016-09-09
  • php中使用Imagick實(shí)現(xiàn)圖像直方圖的實(shí)現(xiàn)代碼

    php中使用Imagick實(shí)現(xiàn)圖像直方圖的實(shí)現(xiàn)代碼

    玩過(guò)單反相機(jī)的人應(yīng)該都知道圖像直方圖(Image Histogram),簡(jiǎn)單點(diǎn)說(shuō),它通過(guò)計(jì)算每個(gè)色階在總像素中所占的比例來(lái)反映圖像的曝光情況。
    2011-08-08
  • 小談php正則提取圖片地址

    小談php正則提取圖片地址

    最近在開(kāi)發(fā)程序的時(shí)候需要獲取提取內(nèi)容中的圖片地址,這里簡(jiǎn)單分享下方法,需要的朋友可以參考下
    2014-03-03
  • PHP pthreads v3在centos7平臺(tái)下的安裝與配置操作方法

    PHP pthreads v3在centos7平臺(tái)下的安裝與配置操作方法

    這篇文章主要介紹了PHP pthreads v3在centos7平臺(tái)下的安裝與配置操作方法,結(jié)合圖文與實(shí)例形式分析了PHP pthreads v3在centos7平臺(tái)下的安裝與配置操作具體步驟、相關(guān)命令與注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • php實(shí)現(xiàn)的簡(jiǎn)單檢驗(yàn)登陸類(lèi)

    php實(shí)現(xiàn)的簡(jiǎn)單檢驗(yàn)登陸類(lèi)

    這篇文章主要介紹了php實(shí)現(xiàn)的簡(jiǎn)單檢驗(yàn)登陸類(lèi),可實(shí)現(xiàn)基本的php數(shù)據(jù)庫(kù)查詢(xún)及密碼匹配的功能,需要的朋友可以參考下
    2015-06-06
  • php實(shí)現(xiàn)的雙向隊(duì)列類(lèi)實(shí)例

    php實(shí)現(xiàn)的雙向隊(duì)列類(lèi)實(shí)例

    這篇文章主要介紹了php實(shí)現(xiàn)的雙向隊(duì)列類(lèi),是數(shù)據(jù)結(jié)構(gòu)中非常重要的一個(gè)數(shù)據(jù)結(jié)構(gòu)類(lèi)型,需要的朋友可以參考下
    2014-09-09

最新評(píng)論