【问题标题】:How can I get phpunit to not swallow error_log output?如何让 phpunit 不吞下 error_log 输出?
【发布时间】: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 = Onerror_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_errorserror_log 在测试中以确保它们符合您的预期。
  • 尝试使用 phpunit 4.2 以上测试将写入控制台但不会写入错误日志文件。

标签: php phpunit error-log


【解决方案1】:

所以这原来是从命令行运行 php 没有记录错误的症状(讨论 here),并通过确保执行 phpunit 的用户对错误日志具有写入权限来解决。

另外,当从命令行调用 php 时,它使用了不同的 ini 文件(讨论过here)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-02
      • 2016-11-01
      • 2018-07-05
      • 2019-06-18
      • 2013-01-31
      • 1970-01-01
      • 2011-03-05
      • 2021-12-17
      相关资源
      最近更新 更多