Yii Framework v1.1.10 绫诲弬鑰

CProfileLogRoute

system.logging
缁ф壙 class CProfileLogRoute » CWebLogRoute » CLogRoute » CComponent
婧愯嚜 1.0
鐗堟湰 $Id: CProfileLogRoute.php 3515 2011-12-28 12:29:24Z mdomba $
婧愮爜 framework/logging/CProfileLogRoute.php
CProfileLogRoute鍦ㄧ綉椤典腑鏄剧ず鍒嗘瀽缁撴灉銆

閫氳繃璋冪敤YiiBase::beginProfile()YiiBase::endProfile()瀹屾垚鍒嗘瀽锛 瀹冧滑鏍囪寮濮嬪拰缁撴潫鐨勪唬鐮佸潡銆

CProfileLogRoute閫氳繃璁剧疆report灞炴ф敮鎸佷袱绉嶇被鍨嬫姤鍛婏細
  • summary: 姣忎竴涓爣璁颁唬鐮佸潡鐨勬墽琛屾椂闂村垪琛
  • callstack: 鍦ㄤ竴涓垎灞傜殑瑙嗗浘涓垪鍑烘爣璁颁唬鐮佸潡锛屽弽鏄犲畠浠殑璋冪敤椤哄簭銆

鍏叡灞炴

闅愯棌缁ф壙灞炴

灞炴绫诲瀷鎻忚堪瀹氫箟鍦
categories string 琚楀彿鎴栫┖鏍煎垎闅旂殑绫诲埆鍒楄〃銆傞粯璁や负绌猴紝鎰忓懗鐫鎵鏈夌被鍒 CLogRoute
enabled boolean 鏄惁鍚敤杩欎釜鏃ュ織璺敱銆傞粯璁や负true銆 CLogRoute
filter mixed 闄勫姞杩囨护鍣 (渚嬪 CLogFilter) 瀹冭搴旂敤鍒版棩蹇椾俊鎭 杩欎釜灞炴х殑鍊艰浼犻掑埌 Yii::createComponent 鍒涘缓涓涓棩蹇楄繃婊ゅ櫒瀵硅薄銆 缁撴灉锛岃繖鍙兘鏄竴涓〃绀鸿繃婊ゅ櫒绫诲悕鐨勫瓧绗︿覆鎴栦竴涓〃绀鸿繃婊ゅ櫒閰嶇疆鐨勬暟缁勩

鎬讳箣锛屾棩蹇楄繃婊ゅ櫒绫诲簲璇ユ槸 CLogFilter 鎴栧畠鐨勪竴涓瓙绫汇 榛樿涓簄ull锛屾剰鍛崇潃娌℃湁杩囨护鍣ㄨ浣跨敤銆
CLogRoute
groupByToken boolean 鏄惁鎸夌収鍒嗘瀽浠ょ墝鎬昏缁撴灉銆 濡傛灉涓篺alse锛岀粨鏋滃皢琚被鍒悎骞躲 榛樿涓簍rue銆傛敞鎰忚繖涓睘鎬т粎浠呭鎽樿鎶ュ憡鏈夋晥锛 褰report鏄榮ummary鈥欐椂鍚敤瀹冦 CProfileLogRoute
ignoreAjaxInFireBug boolean 鍦‵irebug涓殑Ajax璋冪敤鐨勬棩蹇楁槸鍚﹀簲璇ヨ蹇界暐銆傞粯璁や负true銆 杩欎釜閫夐」瑕佸皬蹇冧娇鐢紝,鍥犱负涓涓猘jax璋冪敤杩斿洖鎵鏈夌殑杈撳嚭浣滀负涓涓粨鏋滄暟鎹 渚嬪锛屽鏋渁jax璋冪敤涓涓猨son鏍煎紡鐨勮繑鍥炵粨鏋滐紝浠讳綍鏉ヨ嚜鏃ュ織璁板綍鍣ㄧ殑杈撳嚭灏嗗紩璧穉jax璋冪敤澶辫触銆 CWebLogRoute
levels string 鐢ㄩ楀彿鎴栫┖鏍煎垎闅旂殑绛夌骇鍒楄〃銆傞粯璁ゆ槸绌猴紝鎰忓懗鐫鎵鏈夌瓑绾с CLogRoute
logs array 鍒扮洰鍓嶄负姝㈣繖涓棩蹇楄矾鐢辨悳闆嗙殑鏃ュ織銆 CLogRoute
report string 瑕佹樉绀虹殑鍒嗘瀽鎶ュ憡鐨勭被鍨嬨傞粯璁や负鈥榮ummary鈥欍 CProfileLogRoute
showInFireBug boolean 鏄惁姝ゆ棩鏈熷簲璇ユ樉绀哄湪FireBug鑰屼笉鏄祻瑙堝櫒绐楀彛銆傞粯璁や负false銆 CWebLogRoute

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__call() 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 CComponent
__get() 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 CComponent
__isset() 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 CComponent
__set() 璁剧疆涓涓粍浠剁殑灞炴у笺 CComponent
__unset() 璁剧疆涓涓粍浠剁殑灞炴т负null銆 CComponent
asa() 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° CComponent
attachBehavior() 闄勫姞涓涓涓哄埌缁勪欢銆 CComponent
attachBehaviors() 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 CComponent
attachEventHandler() 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 CComponent
canGetProperty() 纭畾灞炴ф槸鍚﹀彲璇汇 CComponent
canSetProperty() 纭畾灞炴ф槸鍚﹀彲鍐欍 CComponent
collectLogs() 浠庢棩蹇楄褰曞櫒鍙栧洖宸茶繃婊ょ殑鏃ュ織淇℃伅浠ヤ究杩涗竴姝ュ鐞嗐 CLogRoute
detachBehavior() 浠庣粍浠朵腑鍒嗙涓涓涓恒 CComponent
detachBehaviors() 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 CComponent
detachEventHandler() 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 CComponent
disableBehavior() 绂佺敤涓涓檮鍔犺涓恒 CComponent
disableBehaviors() 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
enableBehavior() 鍚敤涓涓檮鍔犺涓恒 CComponent
enableBehaviors() 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
evaluateExpression() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 CComponent
getEventHandlers() 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 CComponent
getReport() 杩斿洖瑕佹樉绀虹殑鍒嗘瀽鎶ュ憡鐨勭被鍨嬨傞粯璁や负鈥榮ummary鈥欍 CProfileLogRoute
hasEvent() 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 CComponent
hasEventHandler() 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 CComponent
hasProperty() 纭畾灞炴ф槸鍚﹁瀹氫箟銆 CComponent
init() 鍒濆鍖栨璺敱銆 CProfileLogRoute
processLogs() 鏄剧ず鏃ュ織淇℃伅銆 CProfileLogRoute
raiseEvent() 鍙戣捣涓涓簨浠躲 CComponent
setReport() 璁剧疆瑕佹樉绀虹殑鍒嗘瀽鎶ュ憡鐨勭被鍨嬨傛湁鏁堝煎寘鎷榮ummary鈥欏拰鈥榗allstack鈥欍 CProfileLogRoute

鍙椾繚鎶ゆ柟娉

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
aggregateResult() 鑱氱劍鎶ュ憡缁撴灉銆 CProfileLogRoute
displayCallstack() 鏄剧ず鍒嗘瀽绋嬪簭涓烘樉绀虹殑璋冪敤鍫嗘爤銆 CProfileLogRoute
displaySummary() 鏄剧ず鍒嗘瀽缁撴灉鐨勬姤鍛婃憳瑕併 CProfileLogRoute
formatLogMessage() 鏍煎紡鍖栦竴鏉℃棩蹇椾俊鎭凡缁欏畾涓嶅悓瀛楁銆 CLogRoute
render() 娓叉煋璇ヨ鍥俱 CWebLogRoute

灞炴ц缁

groupByToken 灞炴
public boolean $groupByToken;

鏄惁鎸夌収鍒嗘瀽浠ょ墝鎬昏缁撴灉銆 濡傛灉涓篺alse锛岀粨鏋滃皢琚被鍒悎骞躲 榛樿涓簍rue銆傛敞鎰忚繖涓睘鎬т粎浠呭鎽樿鎶ュ憡鏈夋晥锛 褰report鏄榮ummary鈥欐椂鍚敤瀹冦

report 灞炴
public string getReport()
public void setReport(string $value)

瑕佹樉绀虹殑鍒嗘瀽鎶ュ憡鐨勭被鍨嬨傞粯璁や负鈥榮ummary鈥欍

鏂规硶璇︾粏

aggregateResult() 鏂规硶
protected array aggregateResult(array $result, float $delta)
$result array 杩欎釜浠g爜鍧楃殑鏃ュ織缁撴灉
$delta float 杩欎釜浠g爜鍧楄姳璐圭殑鏃堕棿
{return} array
婧愮爜锛 framework/logging/CProfileLogRoute.php#191 (鏄剧ず)
protected function aggregateResult($result,$delta)
{
    list(
$token,$calls,$min,$max,$total)=$result;
    if(
$delta<$min)
        
$min=$delta;
    else if(
$delta>$max)
        
$max=$delta;
    
$calls++;
    
$total+=$delta;
    return array(
$token,$calls,$min,$max,$total);
}

鑱氱劍鎶ュ憡缁撴灉銆

displayCallstack() 鏂规硶
protected void displayCallstack(array $logs)
$logs array 鏃ュ織鍒楄〃
婧愮爜锛 framework/logging/CProfileLogRoute.php#93 (鏄剧ず)
protected function displayCallstack($logs)
{
    
$stack=array();
    
$results=array();
    
$n=0;
    foreach(
$logs as $log)
    {
        if(
$log[1]!==CLogger::LEVEL_PROFILE)
            continue;
        
$message=$log[0];
        if(!
strncasecmp($message,'begin:',6))
        {
            
$log[0]=substr($message,6);
            
$log[4]=$n;
            
$stack[]=$log;
            
$n++;
        }
        else if(!
strncasecmp($message,'end:',4))
        {
            
$token=substr($message,4);
            if((
$last=array_pop($stack))!==null && $last[0]===$token)
            {
                
$delta=$log[3]-$last[3];
                
$results[$last[4]]=array($token,$delta,count($stack));
            }
            else
                throw new 
CException(Yii::t('yii','CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.',
                    array(
'{token}'=>$token)));
        }
    }
    
// remaining entries should be closed here
    
$now=microtime(true);
    while((
$last=array_pop($stack))!==null)
        
$results[$last[4]]=array($last[0],$now-$last[3],count($stack));
    
ksort($results);
    
$this->render('profile-callstack',$results);
}

鏄剧ず鍒嗘瀽绋嬪簭涓烘樉绀虹殑璋冪敤鍫嗘爤銆

displaySummary() 鏂规硶
protected void displaySummary(array $logs)
$logs array 鏃ュ織鍒楄〃
婧愮爜锛 framework/logging/CProfileLogRoute.php#135 (鏄剧ず)
protected function displaySummary($logs)
{
    
$stack=array();
    foreach(
$logs as $log)
    {
        if(
$log[1]!==CLogger::LEVEL_PROFILE)
            continue;
        
$message=$log[0];
        if(!
strncasecmp($message,'begin:',6))
        {
            
$log[0]=substr($message,6);
            
$stack[]=$log;
        }
        else if(!
strncasecmp($message,'end:',4))
        {
            
$token=substr($message,4);
            if((
$last=array_pop($stack))!==null && $last[0]===$token)
            {
                
$delta=$log[3]-$last[3];
                if(!
$this->groupByToken)
                    
$token=$log[2];
                if(isset(
$results[$token]))
                    
$results[$token]=$this->aggregateResult($results[$token],$delta);
                else
                    
$results[$token]=array($token,1,$delta,$delta,$delta);
            }
            else
                throw new 
CException(Yii::t('yii','CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.',
                    array(
'{token}'=>$token)));
        }
    }

    
$now=microtime(true);
    while((
$last=array_pop($stack))!==null)
    {
        
$delta=$now-$last[3];
        
$token=$this->groupByToken $last[0] : $last[2];
        if(isset(
$results[$token]))
            
$results[$token]=$this->aggregateResult($results[$token],$delta);
        else
            
$results[$token]=array($token,1,$delta,$delta,$delta);
    }

    
$entries=array_values($results);
    
$func=create_function('$a,$b','return $a[4]<$b[4]?1:0;');
    
usort($entries,$func);

    
$this->render('profile-summary',$entries);
}

鏄剧ず鍒嗘瀽缁撴灉鐨勬姤鍛婃憳瑕併

getReport() 鏂规硶
public string getReport()
{return} string 瑕佹樉绀虹殑鍒嗘瀽鎶ュ憡鐨勭被鍨嬨傞粯璁や负鈥榮ummary鈥欍
婧愮爜锛 framework/logging/CProfileLogRoute.php#56 (鏄剧ず)
public function getReport()
{
    return 
$this->_report;
}

init() 鏂规硶
public void init()
婧愮爜锛 framework/logging/CProfileLogRoute.php#48 (鏄剧ず)
public function init()
{
    
$this->levels=CLogger::LEVEL_PROFILE;
}

鍒濆鍖栨璺敱銆 杩欎釜鏂规硶鍦ㄨ矾鐢辩鐞嗗櫒鍒涘缓姝よ矾鐢卞悗鍙戣捣銆

processLogs() 鏂规硶
public void processLogs(array $logs)
$logs array 鏃ュ織淇℃伅鍒楄〃
婧愮爜锛 framework/logging/CProfileLogRoute.php#77 (鏄剧ず)
public function processLogs($logs)
{
    
$app=Yii::app();
    if(!(
$app instanceof CWebApplication) || $app->getRequest()->getIsAjaxRequest())
        return;

    if(
$this->getReport()==='summary')
        
$this->displaySummary($logs);
    else
        
$this->displayCallstack($logs);
}

鏄剧ず鏃ュ織淇℃伅銆

setReport() 鏂规硶
public void setReport(string $value)
$value string 瑕佹樉绀虹殑鍒嗘瀽鎶ュ憡鐨勭被鍨嬨傛湁鏁堝煎寘鎷榮ummary鈥欏拰鈥榗allstack鈥欍
婧愮爜锛 framework/logging/CProfileLogRoute.php#64 (鏄剧ず)
public function setReport($value)
{
    if(
$value==='summary' || $value==='callstack')
        
$this->_report=$value;
    else
        throw new 
CException(Yii::t('yii','CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".',
            array(
'{report}'=>$value)));
}

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.