CProfileLogRoute

优质
小牛编辑
135浏览
2023-12-01
所有包 | 属性 | 方法
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: 在一个分层的视图中列出标记代码块,反映它们的调用顺序。

公共属性

隐藏继承属性

属性类型描述定义在
categoriesstring被逗号或空格分隔的类别列表。默认为空,意味着所有类别。CLogRoute
enabledboolean是否启用这个日志路由。默认为true。CLogRoute
filtermixed附加过滤器 (例如 CLogFilter) 它被应用到日志信息。 这个属性的值被传递到 Yii::createComponent 创建一个日志过滤器对象。 结果,这可能是一个表示过滤器类名的字符串或一个表示过滤器配置的数组。

总之,日志过滤器类应该是 CLogFilter 或它的一个子类。 默认为null,意味着没有过滤器被使用。
CLogRoute
groupByTokenboolean是否按照分析令牌总计结果。 如果为false,结果将被类别合并。 默认为true。注意这个属性仅仅对摘要报告有效, 当report是‘summary’时启用它。CProfileLogRoute
ignoreAjaxInFireBugboolean在Firebug中的Ajax调用的日志是否应该被忽略。默认为true。 这个选项要小心使用,,因为一个ajax调用返回所有的输出作为一个结果数据。 例如,如果ajax调用一个json格式的返回结果,任何来自日志记录器的输出将引起ajax调用失败。CWebLogRoute
levelsstring用逗号或空格分隔的等级列表。默认是空,意味着所有等级。CLogRoute
logsarray到目前为止这个日志路由搜集的日志。CLogRoute
reportstring要显示的分析报告的类型。默认为‘summary’。CProfileLogRoute
showInFireBugboolean是否此日期应该显示在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()计算一个PHP表达式,或根据组件上下文执行回调。CComponent
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getReport()返回要显示的分析报告的类型。默认为‘summary’。CProfileLogRoute
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
init()初始化此路由。CProfileLogRoute
processLogs()显示日志信息。CProfileLogRoute
raiseEvent()发起一个事件。CComponent
setReport()设置要显示的分析报告的类型。有效值包括‘summary’和‘callstack’。CProfileLogRoute

受保护方法

隐藏继承方法

方法描述定义在
aggregateResult()聚焦报告结果。CProfileLogRoute
displayCallstack()显示分析程序为显示的调用堆栈。CProfileLogRoute
displaySummary()显示分析结果的报告摘要。CProfileLogRoute
formatLogMessage()格式化一条日志信息已给定不同字段。CLogRoute
render()渲染该视图。CWebLogRoute

属性详细

groupByToken 属性 public boolean $groupByToken;

是否按照分析令牌总计结果。 如果为false,结果将被类别合并。 默认为true。注意这个属性仅仅对摘要报告有效, 当report是‘summary’时启用它。

report 属性 public string getReport()
public void setReport(string $value)

要显示的分析报告的类型。默认为‘summary’。

方法详细

aggregateResult() 方法
protected array aggregateResult(array $result, float $delta)
$resultarray这个代码块的日志结果
$deltafloat这个代码块花费的时间
{return}array
源码: framework/logging/CProfileLogRoute.php#191 (显示) protectedfunctionaggregateResult($result,$delta)
{
list($token,$calls,$min,$max,$total)=$result;
if($delta<$min)
$min=$delta;
elseif($delta>$max)
$max=$delta;
$calls++;
$total+=$delta;
returnarray($token,$calls,$min,$max,$total);
}

聚焦报告结果。

displayCallstack() 方法
protected void displayCallstack(array $logs)
$logsarray日志列表
源码: framework/logging/CProfileLogRoute.php#93 (显示) protectedfunctiondisplayCallstack($logs)
{
$stack=array();
$results=array();
$n=0;
foreach($logsas$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++;
}
elseif(!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
thrownewCException(Yii::t('yii','CProfileLogRoutefoundamismatchingcodeblock"{token}".MakesurethecallstoYii::beginProfile()andYii::endProfile()beproperlynested.',
array('{token}'=>$token)));
}
}
//remainingentriesshouldbeclosedhere
$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)
$logsarray日志列表
源码: framework/logging/CProfileLogRoute.php#135 (显示) protectedfunctiondisplaySummary($logs)
{
$stack=array();
foreach($logsas$log)
{
if($log[1]!==CLogger::LEVEL_PROFILE)
continue;
$message=$log[0];
if(!strncasecmp($message,'begin:',6))
{
$log[0]=substr($message,6);
$stack[]=$log;
}
elseif(!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
thrownewCException(Yii::t('yii','CProfileLogRoutefoundamismatchingcodeblock"{token}".MakesurethecallstoYii::beginProfile()andYii::endProfile()beproperlynested.',
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要显示的分析报告的类型。默认为‘summary’。
源码: framework/logging/CProfileLogRoute.php#56 (显示) publicfunctiongetReport()
{
return$this->_report;
}
init() 方法
public void init()
源码: framework/logging/CProfileLogRoute.php#48 (显示) publicfunctioninit()
{
$this->levels=CLogger::LEVEL_PROFILE;
}

初始化此路由。 这个方法在路由管理器创建此路由后发起。

processLogs() 方法
public void processLogs(array $logs)
$logsarray日志信息列表
源码: framework/logging/CProfileLogRoute.php#77 (显示) publicfunctionprocessLogs($logs)
{
$app=Yii::app();
if(!($appinstanceofCWebApplication)||$app->getRequest()->getIsAjaxRequest())
return;

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

显示日志信息。

setReport() 方法
public void setReport(string $value)
$valuestring要显示的分析报告的类型。有效值包括‘summary’和‘callstack’。
源码: framework/logging/CProfileLogRoute.php#64 (显示) publicfunctionsetReport($value)
{
if($value==='summary'||$value==='callstack')
$this->_report=$value;
else
thrownewCException(Yii::t('yii','CProfileLogRoute.report"{report}"isinvalid.Validvaluesinclude"summary"and"callstack".',
array('{report}'=>$value)));
}