CProfileLogRoute
| Пакет | system.logging |
|---|---|
| Наследование | класс CProfileLogRoute » CWebLogRoute » CLogRoute » CComponent |
| С момента | 1.0 |
| Исходный код | framework/logging/CProfileLogRoute.php |
CProfileLogRoute отображает результаты профилирования на веб-странице.
Профилирование выполняется с помощью вызовов YiiBase::beginProfile() и YiiBase::endProfile(), которые отмечают начало и конец блока кода.
CProfileLogRoute поддерживает два типа отчетов, устанавливая свойство report:
Профилирование выполняется с помощью вызовов YiiBase::beginProfile() и YiiBase::endProfile(), которые отмечают начало и конец блока кода.
CProfileLogRoute поддерживает два типа отчетов, устанавливая свойство report:
- summary: список времени выполнения каждого отмеченного блока кода
- callstack: список отмеченных блоков кода в иерархическом представлении, отражающем порядок их вызовов.
Свойства
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| categories | mixed | массив категорий или строковый список, разделённый запятыми или пробелами. | CLogRoute |
| collapsedInFireBug | boolean | будет ли журнал сжат по умолчанию в Firebug. | CWebLogRoute |
| enabled | boolean | включён ли данный маршрут журнала. | CLogRoute |
| except | mixed | массив категорий или строковый список, разделённый запятыми или пробелами, которые исключаются из журналов. | CLogRoute |
| filter | mixed | дополнительный фильтр (например, CLogFilter), который можно применить к сообщениям журнала. | CLogRoute |
| groupByToken | boolean | объединять ли результаты по токенам профилирования. | CProfileLogRoute |
| ignoreAjaxInFireBug | boolean | должен ли журнал игнорироваться в FireBug для AJAX-запросов. | CWebLogRoute |
| ignoreFlashInFireBug | boolean | должен ли журнал игнорироваться в FireBug для вызовов Flash/Flex. | CWebLogRoute |
| levels | string | список уровней, разделённых запятыми или пробелами. | CLogRoute |
| logs | array | журналы, собранные до сих пор этим маршрутом журнала. | CLogRoute |
| report | string | тип отчета о профилировании для отображения. | CProfileLogRoute |
| showInFireBug | boolean | отображать ли журнал в FireBug вместо окна браузера. | CWebLogRoute |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает метод, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства нулевым. | 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) | ||
| $result | массив | результат журнала для данного блока кода |
| $delta | float | время, затраченное на данный блок кода |
| {return} | массив | |
Исходный код: framework/logging/CProfileLogRoute.php#194 (показать)
protected function aggregateResult($result,$delta)
{
list($token,$calls,$min,$max,$total)=$result;
if($delta<$min)
$min=$delta;
elseif($delta>$max)
$max=$delta;
$calls++;
$total+=$delta;
return array($token,$calls,$min,$max,$total);
}
Агрегирует результат отчета.
displayCallstack() метод
protected void displayCallstack(array $logs) | ||
| $logs | массив | список журналов |
Исходный код: framework/logging/CProfileLogRoute.php#94 (показать)
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++;
}
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
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 | массив | список журналов |
Исходный код: framework/logging/CProfileLogRoute.php#137 (показать)
protected function displaySummary($logs)
{
$stack=array();
$results=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;
}
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
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} | строка | тип отчета профилирования для отображения. По умолчанию 'summary'. |
Исходный код: framework/logging/CProfileLogRoute.php#55 (показать)
public function getReport()
{
return $this->_report;
}
init() метод
public void init() |
Исходный код: framework/logging/CProfileLogRoute.php#47 (показать)
public function init()
{
$this->levels=CLogger::LEVEL_PROFILE;
}
Инициализирует маршрут. Этот метод вызывается после создания маршрута менеджером маршрутов.
processLogs() метод
public void processLogs(array $logs) | ||
| $logs | массив | список сообщений журнала |
Исходный код: 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 | строка | тип отчета профилирования для отображения. Допустимые значения: 'summary' и 'callstack'. |
Исходный код: 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)));
}
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CProfileLogRoute