Как исключить категорию application из логов?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Вадим Синчев
Сообщения: 3
Зарегистрирован: 2022.11.14, 15:46

Как исключить категорию application из логов?

Сообщение Вадим Синчев »

В текущей системе логи очередей отправляются в отдельную таблицу.
Настройки такие:

Код: Выделить всё

return [
    'class' => Queue::class,
    'db' => 'db',
    'tableName' => '{{%queue}}',
    'channel' => 'default',
    'mutex' => MysqlMutex::class,
    'as log' => LogBehavior::class
];

Код: Выделить всё

return [
    'targets' => [
        [
            'class' => DbTarget::class,
            'logTable' => 'log_queue',
            'levels' => ['error', 'warning', 'info'],
            'categories' => ['yii\queue\*'],
            'except' => ['application'],
        ],
    ],
];
Вместе с нужными логами yii\queue\* в целевую таблицу попадают лишние записи из категории application, а 'except' => ['application'] не помогает. Полез в глубь логгера:

vendor/yiisoft/yii2/log/Target.php

Код: Выделить всё

public function collect($messages, $final)
    {
        $this->messages = array_merge($this->messages, static::filterMessages($messages, $this->getLevels(), $this->categories, $this->except));
        $count = count($this->messages);
        if ($count > 0 && ($final || $this->exportInterval > 0 && $count >= $this->exportInterval)) {
            if (($context = $this->getContextMessage()) !== '') {
                $this->messages[] = [$context, Logger::LEVEL_INFO, 'application', YII_BEGIN_TIME, [], 0];
            }
            // set exportInterval to 0 to avoid triggering export again while exporting
            $oldExportInterval = $this->exportInterval;
            $this->exportInterval = 0;
            $this->export();
            $this->exportInterval = $oldExportInterval;

            $this->messages = [];
        }
    }
Получается если контекст не пустой, то он добавляется отдельной записью. Можно ли средствами фреймворка обойти это? Или создать свой логгер проще?
Вадим Синчев
Сообщения: 3
Зарегистрирован: 2022.11.14, 15:46

Re: Как исключить категорию application из логов?

Сообщение Вадим Синчев »

Нашел промежуточное решение, убрал все переменные контекста:

Код: Выделить всё

return [
    'targets' => [
        [
            'class' => DbTarget::class,
            'logTable' => 'log_queue',
            'levels' => ['error', 'warning', 'info'],
            'categories' => ['yii\queue\*'],
            'except' => ['application'],
            'logVars' => [], // <-------------- Вот это.
        ],
    ],
];
Ответить