Как динамически установить путь к файлу журнала для разных модулей в yii

Я хочу установить разные пути журнала для каждого модуля, чтобы все ошибки и предупреждения были классифицированы по имени модуля как родительской папке.

i.e

среда выполнения/журналы/имя_модуля/errors.log

среда выполнения/журналы/имя_модуля/warnings.log

среда выполнения/журналы/имя_модуля/info.log.

в настоящее время компонент журнала настроен в config/main.php

    'log' => [
        'traceLevel' => YII_DEBUG ? 3 : 0,
        'flushInterval' => 1,
        'targets' => [
            [
                'class' => 'yii\log\FileTarget',
                'levels' => ['info'],
                'categories' => ['common\modules\*'],
                'logFile' => '@runtime/logs/common.modules.info.log',  
            ],
      ],
]

Я хочу динамически назначать значение пути logFile в указанном выше файле конфигурации приложения, чтобы при вызове какой-либо ошибки, предупреждения или информации в каком-либо модуле он автоматически выбирал имя этого модуля и регистрировал информацию.


person Innam Hunzai    schedule 09.08.2016    source источник
comment
Я не знаю о возможности динамического изменения. Возможно, вам придется временно решить эту проблему, написав все вручную.   -  person Gytis TG    schedule 12.08.2016
comment
@EdvinTenovimas должен быть какой-то способ, вместо того, чтобы писать все.....   -  person Innam Hunzai    schedule 16.08.2016
comment
Я честно не могу ответить на этот вопрос. Извиняюсь. :( Я просто написал все от руки (но это не заняло много времени).   -  person Gytis TG    schedule 16.08.2016


Ответы (1)


Вы можете добавить цель журнала динамически из контроллера или модуля init.

$target = new FileTarget();
$target->logFile = \Yii::getAlias('@runtime') . '/custom.log'
$target->categories = ['log-category']
\Yii::$app->getLog()->targets = [$target];

Но я думаю, что будет лучше создать новый класс FileTarget и переместить в него статические настройки, такие как категории.

person Egor Dudin    schedule 03.04.2019