PHPUnit将PHP的默认错误日志以及自定义应用程序日志文件中的每条日志消息输出到命令行

时间:2016-12-08 07:47:06

标签: php xml nginx phpunit

当我运行PHPUnit时,它涉及测试我写的一个类,它通过PHP'error_log()或通过Monolog(到一个自定义文件)记录一些东西,记录的内容被转储到命令行。

即使是最简单的形式,我也可以重现这个问题。甚至不确定它是否是一个问题,底线是我想关闭命令行上每个已记录项目的转储。我一直在墙上撞了一会儿,但我似乎无法弄明白。我该怎么关掉它?

事实;

  • 我记录的每个项目都显示在cli
  • 在运行测试之前,以下内容返回一个空字符串; ini_get('error_log');
  • 我在nginx(1.10.1)+ php-fpm(使用PHP 7.0.7)
  • 相关问题,但没有帮助; Stop log messages from appearing in the command line

一个例子;

class OutputOnCliTest extends PHPUnit_Framework_TestCase
{
    /** @test */
    public function assertAndLogSomething()
    {
        $this->assertEquals(true, true);

        error_log('I do not want to show this on the command line');
    }

    /** @test */
    public function assertAndLogSomethingElse()
    {
        $logger = new \Monolog\Logger('loggerName');

        // no need to set a Monolog handler for this example, just want to log right away
        $logger->info('I do not want to show this either');

        $this->assertEquals(true, true);
    }
}

CLI:

$  ls -la

-rw-r--r--   1 user  group   1150 Dec  7 18:47 phpunit.xml
drwxr-xr-x   4 user  group    136 Dec  7 17:44 tests
drwxr-xr-x  17 user  group    578 Dec  7 10:05 vendor


$  ./vendor/bin/phpunit
PHPUnit 5.7.2 by Sebastian Bergmann and contributors.

I do not want to show this on the command line
.[2016-12-07 16:53:58] loggerName.INFO: I do not want to show this either
.                                                                  2 / 2 (100%)

Time: 24 ms, Memory: 4.00MB

OK (2 tests, 2 assertions)
$

PHPUnit.xml

<phpunit bootstrap="vendor/autoload.php">
    <testsuites>
        <testsuite name="Unit-Tests">
            <directory>./tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

有人可以帮助我,所以我可以不停地敲打头。 : - )

1 个答案:

答案 0 :(得分:0)

也许更多的是设计解决方案,但是我嘲笑Logger对象,所以除了记录器测试本身之外,它实际上并没有记录任何东西(但是如果你像我一样使用Monolog那么你就没有&# 39;无论如何都要测试这个。)

如果您确实想测试是否收到了对浏览器(或其他地方)的输出,您可以试试这个:

/**
 * @preserveGlobalState disabled
 * @runInSeparateProcess
 */
public function testOutputCanSend()
{
    ob_start();
    // Do some stuff here that outputs directly, $logger->addInfo() etc
    ob_end_clean();
}