亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

YII Framework框架教程之日志用法詳解

2024-05-04 23:43:51
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了YII Framework框架教程之日志用法,結合實例形式詳細分析了Yii框架日志的配置,使用方法及相關注意事項,需要的朋友可以參考下
 

本文實例講述了YII Framework框架日志用法。分享給大家供大家參考,具體如下:

日志的作用(此處省略1000字)

YII中的日志很好很強大,允許你把日志信息存放到數據庫,發送到制定email,存放咋文件中,意見顯示頁面是,甚至可以用來做性能分析。

YII中日志的基本配置:/yii_dev/testwebap/protected/config/main.php

'log'=>array(  'class'=>'CLogRouter',  'routes'=>array(    array(      'class'=>'CFileLogRoute',      'levels'=>'error, warning',    ),    // uncomment the following to show log messages on web pages    /*    array(      'class'=>'CWebLogRoute',    ),    */  ),),

YII中日志的基本使用

可以通過YII提供的Yii::log和Yii::trace進行日志信息的輸出,兩者的區別看看定義就知道了。

函數定義

public static function trace($msg,$category='application'){  if(YII_DEBUG)    self::log($msg,CLogger::LEVEL_TRACE,$category);}public static function log($msg,$level=CLogger::LEVEL_INFO,$category='application'){  if(self::$_logger===null)    self::$_logger=new CLogger;  if(YII_DEBUG && YII_TRACE_LEVEL>0 && $level!==CLogger::LEVEL_PROFILE)  {    $traces=debug_backtrace();    $count=0;    foreach($traces as $trace)    {      if(isset($trace['file'],$trace['line']) && strpos($trace['file'],YII_PATH)!==0)      {        $msg.="/nin ".$trace['file'].' ('.$trace['line'].')';        if(++$count>=YII_TRACE_LEVEL)          break;      }    }  }  self::$_logger->log($msg,$level,$category);}

$msg:你要輸出的日志信息

$category:日志信息所屬分類

$level:日志信息的級別:

const LEVEL_TRACE='trace';用于調試環境,追蹤程序執行流程
const LEVEL_WARNING='warning';警告信息
const LEVEL_ERROR='error';致命錯誤信息
const LEVEL_INFO='info';普通提示信息
const LEVEL_PROFILE='profile';性能調試信息

基本使用方法舉例

<?phpclass DefaultController extends Controller{  public function actionCache ()  {    $category='system.testmod.defaultController';    $level=CLogger::LEVEL_INFO;    $msg='action begin ';    Yii::log($msg,$level,$category);  }}

YII中日志的輸出位置

上文提到YII中日志的輸出位置可以定義為很多位置。主要通過配置文件修改例如:

'log'=>array(  'class'=>'CLogRouter',  'routes'=>array(    array(      'class'=>'CFileLogRoute',      'levels'=>'error, warning',    ),    // uncomment the following to show log messages on web pages    array(      'class'=>'CWebLogRoute',    ),  ),),

不僅輸出到日志文件中,還輸出到web頁面上。

配置文件中:

routes用于配置日志輸出的位置,
class是日志,日志路由的類名
levels是日志的頂級,字符串序列,用都好分割。具體對應CLooger中的常量

注意:

日志文件的存放位置是:/yii_dev/testwebap/protected/runtime/application.log

官方的日志介紹的很詳細,但是后半部分中文翻譯缺失了,這里進行翻譯補全。

Yii 提供了一個靈活可擴展的日志功能。記錄的日志 可以通過日志級別和信息分類進行歸類。通過使用 級別和分類過濾器,所選的信息還可以進一步路由到 不同的目的地,例如一個文件,Email,瀏覽器窗口等。

1. 信息記錄

信息可以通過 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)信息。

2. 信息路由

通過 Yii::log 或 Yii::trace 記錄的信息是保存在內存中的。 我們通常需要將它們顯示到瀏覽器窗口中,或者將他們保存到一些 持久存儲例如文件、Email中。這個就叫作 信息路由,例如, 發送信息到不同的目的地。

在 Yii 中,信息路由是由一個叫做 CLogRouter 的應用組件管理的。 它負責管理一系列稱作 日志路由 的東西。每個日志路由 代表一個單獨的日志目的地。通過一個日志路由發送的信息會被他們的級別和分類過濾。

要使用信息路由,我們需要安裝并預加載一個 CLogRouter 應用組件。我們也還需要配置它的 routes 屬性為我們想要的那些日志路由。 下面的代碼演示了一個所需的 應用配置 示例:

array(  ......  'preload'=>array('log'),  'components'=>array(    ......    'log'=>array(      'class'=>'CLogRouter',      'routes'=>array(        array(          'class'=>'CFileLogRoute',          'levels'=>'trace, info',          'categories'=>'system.*',        ),        array(          'class'=>'CEmailLogRoute',          'levels'=>'error, warning',          'emails'=>'admin@example.com',        ),      ),    ),  ),)

在上面的例子中,我們定義了兩個日志路由。第一個是 CFileLogRoute ,它會把信息保存在位于應用程序 runtime 目錄中的一個文件中。 而且只有級別為 trace 或 info 、分類以 system. 開頭的信息才會被保存。 第二個路由是 CEmailLogRoute ,它會將信息發送到指定的 email 地址,且只有級別為 error 或 warning 的才會發送。

在 Yii 中,有下列幾種日志路由可用:

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

信息: 信息路由發生在當前請求周期最后的 onEndRequest 事件觸發時。 要顯式終止當前請求過程,請調用 CApplication::end() 而不是使用 die() 或 exit(),因為 CApplication::end() 將會觸發onEndRequest 事件, 這樣信息才會被順利地記錄。

3. 信息過濾

正如我們所提到的,信息可以在他們被發送到一個日志路由之前通過它們的級別和分類過濾。 這是通過設置對應日志路由的 levels 和 categories 屬性完成的。 多個級別或分類應使用逗號連接。

由于信息分類是類似 xxx.yyy.zzz 格式的,我們可以將其視為一個分類層級。 具體地,我們說 xxx 是 xxx.yyy的父級,而xxx.yyy 又是 xxx.yyy.zzz 的父級。 這樣我們就可以使用 xxx.* 表示分類 xxx 及其所有的子級和孫級分類

4. 記錄上下文信息

從版本 1.0.6 起,我們可以設置記錄附加的上下文信息, 比如 PHP 的預定義變量(例如 $_GET, $_SERVER),session ID,用戶名等。 這是通過指定一個日志路由的 CLogRoute::filter屬性為一個合適的日志過濾規則實現的。

The framework comes with the convenient CLogFilter that may be used as the needed log filter in most cases. By default, CLogFilter will log a message with variables like $_GET, $_SERVER which often contains valuable system context information. CLogFilter can also be configured to prefix each logged message with session ID, username, etc., which may greatly simplifying the global search when we are checking the numerous logged messages.

框架可能在許多數情況下會用到日志過濾器CLogFilter來過濾日志。默認情況下,CLogFilter日志消息包含了許多系統上下文信息的變量,像$ _GET,$_SERVER。 CLogFilter也可以配置的前綴與會話ID,用戶名等,我們在檢查無數記錄的消息每個記錄的消息時,這可能會極大地簡化了搜索難度

The following configuration shows how to enable logging context information. Note that each log route may have its own log filter. And by default, a log route does not have a log filter.

下面的配置顯示了如何啟用日志記錄的上下文信息。請注意,每個日志路由可能有其自己的日志過濾器。 默認情況下,日志路由不會有日志篩選器。

array(  ......  'preload'=>array('log'),  'components'=>array(    ......    'log'=>array(      'class'=>'CLogRouter',      'routes'=>array(        array(          'class'=>'CFileLogRoute',          'levels'=>'error',          'filter'=>'CLogFilter',        ),        ...other log routes...      ),    ),  ),)

Starting from version 1.0.7, Yii supports logging call stack information in the messages that are logged by calling Yii::trace. This feature is disabled by default because it lowers performance. To use this feature, simply define a constant named YII_TRACE_LEVEL at the beginning of the entry script (before includingyii.php) to be an integer greater than 0. Yii will then append to every trace message with the file name and line number of the call stacks belonging to application code. The number YII_TRACE_LEVEL determines how many layers of each call stack should be recorded. This information is particularly useful during development stage as it can help us identify the places that trigger the trace messages.

從版本1.0.7開始,Yii的日志記錄可以采用堆棧的方式記錄消息,此功能默認是關閉的,因為它會降低性能。要使用此功能,只需在入口腳本(前includingyii.php)定義一個命名為YII_TRACE_LEVEL的常量即一個大于0的整數。 Yii將在堆棧信息中追加應用程序要到的每一個文件名和行號。可以通過設置YII_TRACE_LEVEL來設定堆棧的層數。這種方式在開發階段特別有用,因為它可以幫助我們確定觸發跟蹤消息的地方。

5. Performance Profiling 性能分析

Performance profiling is a special type of message logging. Performance profiling can be used to measure the time needed for the specified code blocks and find out what the performance bottleneck is.

性能分析是一類特殊類型的消息記錄。性能分析可用于測量指定代碼塊所需的時間,并找出性能瓶頸是什么。

To use performance profiling, we need to identify which code blocks need to be profiled. We mark the beginning and the end of each code block by inserting the following methods:

要使用性能分析日志,我們需要確定哪些代碼塊需要分析。我們要在分析性能的代碼短的開始和結尾添加如下方法:

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

where blockID is an ID that uniquely identifies the code block.

其中blockID是一個標識代碼塊的唯一ID。

Note, code blocks need to be nested properly. That is, a code block cannot intersect with another. It must be either at a parallel level or be completely enclosed by the other code block.

注意,這些方法不能交叉嵌套

To show profiling result, we need to install a CLogRouter application component with a CProfileLogRoute log route. This is the same as we do with normal message routing. The CProfileLogRoute route will display the performance results at the end of the current page.

為了顯示分析結果,我們需要為CLogRouter增加CProfileLogRoute路由。然后通過CProfileLogRoute可以把性能測試結果顯示在當前頁面結束。

6. Profiling SQL Executions 分析SQL執行

Profiling is especially useful when working with database since SQL executions are often the main performance bottleneck of an application. While we can manually insert beginProfile and endProfilestatements at appropriate places to measure the time spent in each SQL execution, starting from version 1.0.6, Yii provides a more systematic approach to solve this problem.

在數據庫開發中分析是特別有用的,因為SQL執行往往是應用程序的主要性能瓶頸。盡管我們可以手動在每個SQL執行的適當的地方插入beginProfile和endProfile來衡量花費的時間,但從1.0.6版本開始,Yii提供了更系統的方法來解決這個問題。

By setting CDbConnection::enableProfiling to be true in the application configuration, every SQL statement being executed will be profiled. The results can be readily displayed using the aforementionedCProfileLogRoute, which can show us how much time is spent in executing what SQL statement. We can also call CDbConnection::getStats() to retrieve the total number SQL statements executed and their total execution time.

再實際的應用程序當中通過設置CDbConnection::enableProfiling愛分析每一個正在執行的SQL語句。使用 CProfileLogRoute,結果可以很容易地顯示。它可以顯示我們是在執行什么SQL語句花費多少時間。我們也可以調用CDbConnection:getStats()來分析檢索SQL語句的執行總數和其總的執行時間。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久久网站| 亚洲欧美综合v| 久久影视电视剧免费网站清宫辞电视| 久久久久在线观看| www.欧美三级电影.com| 亚洲国产美女久久久久| 亚洲tv在线观看| 国产一区二区三区在线播放免费观看| 久久香蕉国产线看观看av| 欧美成人免费视频| 国产99久久久欧美黑人| 亚洲资源在线看| 欧美性高跟鞋xxxxhd| 国产精品久久9| 国产成人av在线播放| 日韩av色在线| 丝袜一区二区三区| 亚洲人成电影网站色| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲精品国产suv| 91日本视频在线| 另类专区欧美制服同性| 精品视频偷偷看在线观看| 国产在线拍偷自揄拍精品| 日韩精品免费综合视频在线播放| 日韩av123| 国产精品入口尤物| 日韩在线观看成人| 亚洲国产日韩精品在线| 色av中文字幕一区| 浅井舞香一区二区| 亚洲在线一区二区| 免费91麻豆精品国产自产在线观看| 亚洲国产精品va在线| 久久精品国产精品| 久久精品在线视频| 91久久久久久久一区二区| 久久69精品久久久久久国产越南| 91精品久久久久久| 日本一区二三区好的精华液| 亚洲最大av在线| 国产精品一区久久久| 国产日韩精品视频| 亚洲精品成人网| 久久久国产精品亚洲一区| 亚洲经典中文字幕| 亚洲黄色有码视频| 51色欧美片视频在线观看| 国产亚洲精品久久久久久| 欧美丝袜第一区| 国产ts人妖一区二区三区| 国产精品第一第二| 欧洲永久精品大片ww免费漫画| 国产视频精品在线| 欧美日本高清视频| 久久艹在线视频| 中日韩美女免费视频网址在线观看| 欧美激情网友自拍| 国产大片精品免费永久看nba| 国产拍精品一二三| 欧美日韩一区二区三区在线免费观看| 亚洲精品久久久久国产| 日韩美女在线看| 国产一区二区三区直播精品电影| www.99久久热国产日韩欧美.com| 日韩在线高清视频| 久久久久久久久久久免费精品| 欧美日韩人人澡狠狠躁视频| 国产z一区二区三区| 日韩欧美大尺度| 亚州欧美日韩中文视频| 欧美日韩中文字幕日韩欧美| 亚洲最大福利网站| 亚洲午夜性刺激影院| 精品国产精品自拍| 亚洲成人av片| 亚洲天堂av女优| 亚洲精品v欧美精品v日韩精品| 668精品在线视频| 日韩在线视频线视频免费网站| 国产成人精品日本亚洲| 欧美亚洲视频一区二区| 91国产一区在线| 国产欧美一区二区| 亚洲国产成人久久综合| 日韩欧美中文第一页| 91精品国产综合久久香蕉| 欧美色视频日本高清在线观看| 国产亚洲美女久久| 久久天天躁日日躁| 欧美特黄级在线| 高清欧美性猛交xxxx黑人猛交| www国产亚洲精品久久网站| 欧美亚洲午夜视频在线观看| 亚洲韩国日本中文字幕| 日韩中文字幕视频| 欧美大学生性色视频| 欧美精品日韩三级| 亚洲最大的av网站| 欧美亚洲国产精品| 夜夜狂射影院欧美极品| 亚洲一区二区福利| 欧美午夜宅男影院在线观看| 国产精品日韩久久久久| 成人激情视频免费在线| 久久久久国色av免费观看性色| 久久伊人精品天天| 国产有码在线一区二区视频| 怡红院精品视频| 日本韩国在线不卡| 国产一区二区久久精品| 成人国内精品久久久久一区| 高清日韩电视剧大全免费播放在线观看| 亚洲乱亚洲乱妇无码| 欧美高清激情视频| 国产精品爱久久久久久久| 欧美在线中文字幕| 欧美日韩国产中字| 欧美日韩精品在线观看| 一本一道久久a久久精品逆3p| 亚洲黄色免费三级| 久久精品男人天堂| 久久久久久久电影一区| 亚洲天堂成人在线视频| 国产精自产拍久久久久久| 国产精品女视频| 日韩av在线资源| 这里只有精品视频在线| 亚洲综合在线播放| 国产成人在线一区| 日韩av在线一区二区| 国产欧美日韩视频| 日韩av毛片网| 亚洲激情 国产| 日韩中文字幕亚洲| 亚洲欧美国产视频| 中文字幕日韩在线观看| 亚洲色图13p| 日韩视频永久免费观看| 日韩电影在线观看免费| 97av在线视频| 日韩资源在线观看| 奇米4444一区二区三区| 亚洲成人激情小说| 亚洲欧美国产一区二区三区| 日本亚洲欧洲色α| 亚洲欧洲xxxx| xvideos成人免费中文版| 亚洲人午夜色婷婷| 欧美高清激情视频| 久久综合88中文色鬼| 欧美激情xxxx性bbbb| 国模吧一区二区三区| 国产精品91在线观看| 日韩av免费看网站| 最新69国产成人精品视频免费| 国产成人啪精品视频免费网| 一本久久综合亚洲鲁鲁| 欧美精品免费在线观看| 久久久久久久久91| 亚洲片在线观看| 国产精品国产三级国产专播精品人| 91av在线影院| 欧美在线视频免费播放|