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;
}