Elby
Elby

Reputation: 1674

How to create a different log folder for different modules in a Yii2

In my yii2 application there is two modules in the backend, I have to create different folders/file name for each modules like as follows

@app/runtime/logs/{my_module_name}/app.log 

or

@app/runtime/logs/{my_module_name}.log

How can I achieve that ?

Upvotes: 0

Views: 588

Answers (1)

Akmal
Akmal

Reputation: 553

For this purpose you can override yii\log\FileTarget.

Our custom Logger:

use yii\log\FileTarget;

/**
* Class CustomLogger
* @package common\components
*/
class CustomLogger extends FileTarget
{
    /**
    * @param $logFile
    * @return $this
    */
    public function setLogFile($logFile)
    {
        $this->logFile = $logFile;

        return $this;
    }
}

Register the Logger in common/config/main.php:

return [
    'log' => [
        'traceLevel' => YII_DEBUG ? 3 : 0,
        'targets' => [
            [
                'class'  => 'common\components\CustomLogger',
                'levels' => ['error','warning']
            ]
        ]
    ]
];

Usage:

$logger = Yii::getLogger();
$logger->setLogFile('path/to/log/file.log')->log('some message', Logger::LEVEL_ERROR)

Also you can check if $logFile is not exist you can create it inside setLogFile method.

Upvotes: 1

Related Questions