Yii2:如何在使用 Codeception 进行测试时将日志写入文件?

Yii2: how to write logs in file while testing with Codeception?

我已经在主配置中使用 FileTarget 设置了 log 组件,预计 Yii::error() 会在我启动测试时在文件中写入消息。但是日志记录被 Codeception\Lib\Connector\Yii2\Logger 赶上了,日志文件夹仍然是空的。

这种情况下Yii2可以写日志吗?

<?php

namespace tests;

class SomeTest extends \yii\codeception\TestCase
{

    public function testLogMessage()
    {
        \Yii::error('something bad occurred');
    }

}

这正确地在 runtime/log/app.log 下记录了错误消息:

2018/05/05 03:42:04 [127.0.0.1] [error] [application] 发生错误

您可以在测试前配置正确的记录器:

public function testSomething() {
    Yii::setLogger(Yii::createObject(\yii\log\Logger::class));
    Yii::$app->log->setLogger(Yii::getLogger());
    // log something
    Yii::getLogger()->flush();
    // test log file
}