Class yii\debug\LogTarget

Inheritanceyii\debug\LogTarget » yii\log\Target
Available since extension's version2.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 Methods

Hide inherited 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

Hide inherited 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

Hide inherited properties

$module public property
public yii\debug\Module $module null
$tag public property
public string $tag null

Method Details

Hide inherited methods

__construct() public method

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

            
collect() public method

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

            
collectSummary() protected method

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

            
export() public method

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

            
gc() protected method

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

            
getSqlTotalCount() protected method

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