最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解PHP的Yii框架中日志的相關配置及使用

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

默認的日志是輸出到protected/runtime/application.log

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

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

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

           
         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');

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

拿上面的配置來說:

第一個CFileLogRoute,'categories'=>'test.*',levels里包含了info, test.xx滿足條件,所以會執(zhí)行,將這條log輸出到test.log中,然后下一個CWebLogRoute, 'levels' => CLogger::LEVEL_PROFILE,。而這條log是info的,所以不會執(zhí)行,再下一個CWebLogRoute,'categories' => 'test.* ',levels沒指定,那就說不過濾,所以這個也會被執(zhí)行,所以這條log將被輸出到瀏覽器中。

二、profile功能
另外logger還有一個很強大的功能:profile,

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

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

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

然后還有一個很BUG的功能,Profiling SQL Executions

很多時候sql語句寫的不好會非常影響效率的,但是要確定哪一條語句影響了效率就需要profiling了。YII也提供了這個bug級別的功能。

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

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


日志路由class:

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

信息級別levels:

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

分類categories:

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

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

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


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


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

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

然后在某個controller的某個action中加入:

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

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

在瀏覽器中訪問這個action,記得先打開firebug,然后firebug中就能看到如下圖的記錄:

2015128153707541.jpg (600×83)

相同的query會進行歸類,計算total和average,這個對于分析還是非常有幫助的。

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

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

當然,想要生效還得有下面兩步配置:

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設置為true

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

相關文章

  • PHP5.3連接Oracle客戶端及PDO_OCI模塊的安裝方法

    PHP5.3連接Oracle客戶端及PDO_OCI模塊的安裝方法

    這篇文章主要介紹了PHP5.3連接Oracle客戶端及PDO_OCI模塊的安裝方法,結(jié)合實例形式詳細分析了php5.3環(huán)境下PDO_OCI模塊的安裝方法,并給出了連接Oracle測試程序,需要的朋友可以參考下
    2016-05-05
  • PHP常見字符串處理函數(shù)用法示例【轉(zhuǎn)換,轉(zhuǎn)義,截取,比較,查找,反轉(zhuǎn),切割】

    PHP常見字符串處理函數(shù)用法示例【轉(zhuǎn)換,轉(zhuǎn)義,截取,比較,查找,反轉(zhuǎn),切割】

    這篇文章主要介紹了PHP常見字符串處理函數(shù)用法,結(jié)合實例形式分析了php針對字符串的大小寫轉(zhuǎn)換、轉(zhuǎn)義、截取、比較、查找、反轉(zhuǎn)、切割等操作,需要的朋友可以參考下
    2016-12-12
  • PHP比較運算符的詳細介紹

    PHP比較運算符的詳細介紹

    運算符是告訴編譯程序執(zhí)行特定算術或邏輯操作的符號,通常與操作數(shù)一起構(gòu)成一個表達式,我們經(jīng)??吹剿鼤⑴c數(shù)學運算或邏輯運算。PHP也包涵了很多的運算符,這篇文章詳細解讀一下其中很重要的比較運算符。
    2015-09-09
  • 圖解找出PHP配置文件php.ini的路徑的方法

    圖解找出PHP配置文件php.ini的路徑的方法

    這篇文章主要介紹了圖解找出PHP配置文件php.ini的路徑的方法,其實就是使用phpinfo()函數(shù)輸出PHP信息,然后找到Configuration File (php.ini) Path這節(jié)就可以了,需要的朋友可以參考下
    2014-08-08
  • PHP簡單裝飾器模式實現(xiàn)與用法示例

    PHP簡單裝飾器模式實現(xiàn)與用法示例

    這篇文章主要介紹了PHP簡單裝飾器模式實現(xiàn)與用法,結(jié)合具體實例形式分析了php裝飾器模式的原理、實現(xiàn)與使用方法,需要的朋友可以參考下
    2017-06-06
  • Larave框架通過sanctum進行API鑒權詳解

    Larave框架通過sanctum進行API鑒權詳解

    Laravel是一套簡潔、優(yōu)雅的PHP WEB開發(fā)框架(PHP Web Framework),具有富于表達性且簡潔的語法,Laravel是易于理解且強大的,它提供了強大的工具用以開發(fā)大型,健壯的應用,例如具有自動驗證、路由、Session、緩存、數(shù)據(jù)庫遷移工具、單元測試等常用的工具和功能
    2022-07-07
  • php自定義函數(shù)實現(xiàn)漢字轉(zhuǎn)換utf8編碼的方法

    php自定義函數(shù)實現(xiàn)漢字轉(zhuǎn)換utf8編碼的方法

    這篇文章主要介紹了php自定義函數(shù)實現(xiàn)漢字轉(zhuǎn)換utf8編碼的方法,涉及php針對字符串的遍歷、截取及編碼轉(zhuǎn)換相關操作技巧,需要的朋友可以參考下
    2016-09-09
  • php常用字符串長度函數(shù)strlen()與mb_strlen()用法實例分析

    php常用字符串長度函數(shù)strlen()與mb_strlen()用法實例分析

    這篇文章主要介紹了php常用字符串長度函數(shù)strlen()與mb_strlen()用法,結(jié)合實例形式分析了php字符串長度函數(shù)strlen()與mb_strlen()功能、用法及相關操作注意事項,需要的朋友可以參考下
    2019-06-06
  • PHP調(diào)用全國天氣預報數(shù)據(jù)接口查詢天氣示例

    PHP調(diào)用全國天氣預報數(shù)據(jù)接口查詢天氣示例

    這篇文章主要介紹了PHP調(diào)用全國天氣預報數(shù)據(jù)接口查詢天氣,涉及第三方平臺的key申請、接口數(shù)據(jù)調(diào)用及curl相關操作技巧,需要的朋友可以參考下
    2019-02-02
  • PHP安全下載文件的方法

    PHP安全下載文件的方法

    這篇文章主要介紹了PHP安全下載文件的方法,涉及PHP文件的編碼設置,轉(zhuǎn)換,判斷及下載的相關技巧,需要的朋友可以參考下
    2016-04-04

最新評論

龙州县| 巩留县| 武邑县| 布尔津县| 遂昌县| 乐至县| 柏乡县| 包头市| 钟山县| 巫山县| 嘉定区| 柘荣县| 平舆县| 桃江县| 江阴市| 孙吴县| 界首市| 出国| 高阳县| 永嘉县| 略阳县| 图木舒克市| 秀山| 汉源县| 鄯善县| 基隆市| 岑溪市| 台山市| 万山特区| 万州区| 玉屏| 尤溪县| 安塞县| 翁牛特旗| 紫云| 通辽市| 景德镇市| 鞍山市| 漾濞| 晋州市| 孝昌县|