【发布时间】:2014-10-01 09:28:45
【问题描述】:
当error_log() 在phpunit 中运行时,它不会被写入正常的错误日志文件。我想停止它,以便它写入文件,就像我通过浏览器点击 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 和 ubunutu 上。这在 Windows 7 上不会发生。
【问题讨论】:
-
根据the manual 所说的判断,如果您没有将消息以外的任何参数传递给
error_log(),它会将其保存到PHP 系统记录器中,可能会在tmp 中结束PHP 安装文件夹。如果你想把它保存在其他地方,你可以指定一个路径,比如error_log('Your message', 3, '/path/to/log/file'); -
在我的 php.ini 中使用
log_errors = On和error_log = "/var/log/php/php_errors.log",error_log() 会写入该文件。但是在 PHP 单元中它没有。我不想为了解决 phpunit 而调整所有的 error_log 调用。 -
以上测试适用于我在运行 PHP 5.5.3 和 PHPUnit 4.2.0 的 Ubuntu 13.10 上。您可能想要升级 PHPUnit。它在某些情况下会输出缓冲(多年来已经发生了变化),但我看不出这会如何干扰写入日志文件。此外,
var_dump(或断言)log_errors和error_log在测试中以确保它们符合您的预期。 -
尝试使用 phpunit 4.2 以上测试将写入控制台但不会写入错误日志文件。