如何让phpunit不吞噬error_log的输出?

5
当在phpunit中运行error_log()时,它不会被写入正常的错误日志文件中。我希望停止这种情况,让它像通过浏览器访问PHP时那样写入文件。
<?php

class exampleTest extends PHPUnit_Framework_TestCase {

    public function testSomething() {
        error_log('This will not be written to the error log, but I wish it was!');
        $this->assertEquals(2, 1+1);
    }

}

我目前使用的是php 5.5版本和phpunit 3.7版本。在OSX和Ubuntu上都出现了这个问题。但在Windows 7上没有出现。


根据手册所说,如果你在error_log()中除了消息之外没有传递任何参数,它将保存到PHP系统日志记录器中,可能最终会出现在PHP安装的tmp文件夹中。如果您想将其保存在其他地方,可以指定路径,例如error_log('Your message', 3, '/path/to/log/file'); - scrowler
在我的php.ini文件中,如果设置了 log_errors = Onerror_log = "/var/log/php/php_errors.log" ,那么error_log()函数将会写入该文件。然而,在PHP单元测试中它并不会这样做。我不想调整所有的 error_log 调用来解决phpunit的问题。 - Aaron Silverman
以上测试在我的Ubuntu 13.10上运行PHP 5.5.3和PHPUnit 4.2.0时有效。您可能需要升级PHPUnit。它在某些情况下进行输出缓冲(这些情况随着时间的推移而改变),但我不认为这会干扰写入日志文件。此外,在测试中使用var_dump(或assert)检查log_errorserror_log,以确保它们符合您的预期。 - David Harkness
尝试使用phpunit 4.2以上版本进行测试,结果会输出到控制台而不是错误日志文件。 - Aaron Silverman
2个回答

6

1
当由PHPUnit执行时,error_log()函数会将内容写入PHP STDERR而不是项目本身的配置。这是由PHPUnit定义的错误处理程序引起的。可以使用自定义错误处理程序来更改此默认行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接