diff --git a/framework/log/FileTarget.php b/framework/log/FileTarget.php index 35310e3d1d..8e5c043c40 100644 --- a/framework/log/FileTarget.php +++ b/framework/log/FileTarget.php @@ -85,10 +85,6 @@ class FileTarget extends Target } else { $this->logFile = Yii::getAlias($this->logFile); } - $logPath = dirname($this->logFile); - if (!is_dir($logPath)) { - FileHelper::createDirectory($logPath, $this->dirMode, true); - } if ($this->maxLogFiles < 1) { $this->maxLogFiles = 1; } @@ -105,6 +101,11 @@ class FileTarget extends Target */ public function export() { + $logPath = dirname($this->logFile); + if (!is_dir($logPath)) { + FileHelper::createDirectory($logPath, $this->dirMode, true); + } + $text = implode("\n", array_map([$this, 'formatMessage'], $this->messages)) . "\n"; if (($fp = @fopen($this->logFile, 'a')) === false) { throw new InvalidConfigException("Unable to append to log file: {$this->logFile}"); diff --git a/tests/framework/log/FileTargetTest.php b/tests/framework/log/FileTargetTest.php index 0aefea75ff..993171dbf7 100644 --- a/tests/framework/log/FileTargetTest.php +++ b/tests/framework/log/FileTargetTest.php @@ -10,6 +10,7 @@ namespace yiiunit\framework\log; use Yii; use yii\helpers\FileHelper; use yii\log\Dispatcher; +use yii\log\FileTarget; use yii\log\Logger; use yiiunit\TestCase; @@ -32,6 +33,22 @@ class FileTargetTest extends TestCase ]; } + /** + * @test + */ + public function testInit() + { + $logFile = Yii::getAlias('@yiiunit/runtime/log/filetargettest.log'); + FileHelper::removeDirectory(dirname($logFile)); + new FileTarget([ + 'logFile' => Yii::getAlias('@yiiunit/runtime/log/filetargettest.log'), + ]); + $this->assertFileNotExists( + dirname($logFile), + 'Log directory should not be created during init process' + ); + } + /** * @dataProvider booleanDataProvider * @param bool $rotateByCopy