【问题标题】:How to disable displaying of application log messages on console while phpunit tests are running?如何在运行 phpunit 测试时禁用在控制台上显示应用程序日志消息?
【发布时间】:2018-04-02 12:52:21
【问题描述】:

我正在为 Laravel 应用程序编写测试,特别是针对在控制台上写入大量日志消息的进程。

例如

Log::info('Process starts', [
    'process_name' => 'product_import',
    'data' => // a huge text containing json_encode of the given message object
]

当我运行 phpunit 时,我会在控制台上看到所有这些烦人的日志消息。有没有办法禁用或以某种方式停止这些日志消息?

【问题讨论】:

    标签: php laravel phpunit


    【解决方案1】:

    如果您想在某些指定的测试方法或类中关闭登录,您可以模拟 Log 外观。

    https://laravel.com/docs/5.5/mocking#mocking-facades

    【讨论】:

      【解决方案2】:

      您可以在phpunit.xml 文件中设置环境变量。

      如果您提高日志级别以通知它应该会阻止输出信息通知

      <php>
          <env name="APP_ENV" value="testing"/>
          <env name="CACHE_DRIVER" value="array"/>
          <env name="SESSION_DRIVER" value="array"/>
          <env name="QUEUE_DRIVER" value="sync"/>
          <env name="APP_LOG_LEVEL" value="notice"/>
      </php>
      

      如果您使用的是 Laravel 5.2 或更早版本,则没有 APP_LOG_LEVEL 环境变量, 但是你可以introduce your own env variable and configure Monolog in your app service provider

      【讨论】:

      • 该应用基于 Laravel 5.1。我认为这个版本没有应用程序日志级别的配置:(
      • @ArminSam 我相信该环境变量是在 5.3 中引入的。该解决方案仍然可以工作,但您需要引入自己的环境变量并在您的应用服务提供商中配置 Monolog。
      【解决方案3】:

      相当老的问题,但在我的情况下(Laravel 8,PHP 7.4),这是由于我设置了环境变量而引起的

      # /.env
      
      LOG_CHANNEL=stack`
      

      指的是使用singlestderr 通道的日志记录配置...

      # /config/logging.php
      
      'channels' => [
          'stack' => [
              'driver' => 'stack',
              'channels' => ['single', 'stderr'],
              'ignore_exceptions' => false,
          ],
      

      stderr 是我的问题,删除它后,我不再在我的 phpunit 测试中看到应用程序日志输出

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 2015-07-29
        • 2022-10-13
        • 2014-05-07
        • 1970-01-01
        相关资源
        最近更新 更多