Class yii\debug\LogTarget
| Inheritance | yii\debug\LogTarget » yii\log\Target |
|---|---|
| Available since extension's version | 2.0 |
| Source Code | https://github.com/yiisoft/yii2-debug/blob/master/src/LogTarget.php |
The debug LogTarget is used to store logs for later use in the debugger tool
Public Properties
| Property | Type | Description | Defined By |
|---|---|---|---|
| $module | yii\debug\Module | yii\debug\LogTarget | |
| $tag | string | yii\debug\LogTarget |
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | yii\debug\LogTarget | |
| collect() | Processes the given log messages. | yii\debug\LogTarget |
| export() | Exports log messages to a specific destination. | yii\debug\LogTarget |
Protected Methods
| Method | Description | Defined By |
|---|---|---|
| collectSummary() | Collects summary data of current request. | yii\debug\LogTarget |
| gc() | Removes obsolete data files | yii\debug\LogTarget |
| getSqlTotalCount() | Returns total sql count executed in current request. If database panel is not configured returns 0. | yii\debug\LogTarget |
Property Details
Method Details
| public void __construct ( $module, $config = [] ) | ||
| $module | yii\debug\Module | |
| $config | array | |
public function __construct($module, $config = [])
{
parent::__construct($config);
$this->module = $module;
$this->tag = uniqid();
}
Processes the given log messages.
This method will filter the given messages with levels and categories. And if requested, it will also export the filtering result to specific medium (e.g. email).
| public void collect ( $messages, $final ) | ||
| $messages | array |
Log messages to be processed. See \yii\log\Logger::messages for the structure of each message. |
| $final | boolean |
Whether this method is called at the end of the current application |
public function collect($messages, $final)
{
$this->messages = array_merge($this->messages, $messages);
if ($final) {
$this->export();
}
}
Collects summary data of current request.
| protected array collectSummary ( ) |
protected function collectSummary()
{
if (Yii::$app === null) {
return '';
}
$request = Yii::$app->getRequest();
$response = Yii::$app->getResponse();
$summary = [
'tag' => $this->tag,
'url' => $request->getAbsoluteUrl(),
'ajax' => (int) $request->getIsAjax(),
'method' => $request->getMethod(),
'ip' => $request->getUserIP(),
'time' => $_SERVER['REQUEST_TIME_FLOAT'],
'statusCode' => $response->statusCode,
'sqlCount' => $this->getSqlTotalCount(),
];
if (isset($this->module->panels['mail'])) {
$mailFiles = $this->module->panels['mail']->getMessagesFileName();
$summary['mailCount'] = count($mailFiles);
$summary['mailFiles'] = $mailFiles;
}
return $summary;
}
Exports log messages to a specific destination.
Child classes must implement this method.
| public void export ( ) |
public function export()
{
$path = $this->module->dataPath;
FileHelper::createDirectory($path, $this->module->dirMode);
$summary = $this->collectSummary();
$dataFile = "$path/{$this->tag}.data";
$data = [];
$exceptions = [];
foreach ($this->module->panels as $id => $panel) {
try {
$data[$id] = serialize($panel->save());
} catch (\Exception $exception) {
$exceptions[$id] = new FlattenException($exception);
}
}
$data['summary'] = $summary;
$data['exceptions'] = $exceptions;
file_put_contents($dataFile, serialize($data));
if ($this->module->fileMode !== null) {
@chmod($dataFile, $this->module->fileMode);
}
$indexFile = "$path/index.data";
$this->updateIndexFile($indexFile, $summary);
}
Removes obsolete data files
| protected void gc ( &$manifest ) | ||
| $manifest | array | |
protected function gc(&$manifest)
{
if (count($manifest) > $this->module->historySize + 10) {
$n = count($manifest) - $this->module->historySize;
foreach (array_keys($manifest) as $tag) {
$file = $this->module->dataPath . "/$tag.data";
@unlink($file);
if (isset($manifest[$tag]['mailFiles'])) {
foreach ($manifest[$tag]['mailFiles'] as $mailFile) {
@unlink(Yii::getAlias($this->module->panels['mail']->mailPath) . "/$mailFile");
}
}
unset($manifest[$tag]);
if (--$n <= 0) {
break;
}
}
}
}
Returns total sql count executed in current request. If database panel is not configured returns 0.
| protected integer getSqlTotalCount ( ) |
protected function getSqlTotalCount()
{
if (!isset($this->module->panels['db'])) {
return 0;
}
$profileLogs = $this->module->panels['db']->getProfileLogs();
# / 2 because messages are in couple (begin/end)
return count($profileLogs) / 2;
}