如何在phpunit测试运行时禁止在控制台上显示应用程序日志消息?

时间:2017-10-21 14:52:27

标签: php laravel phpunit

我正在为Laravel应用程序编写测试,专门用于在控制台上写入大量日志消息的进程。

e.g。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可以在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个env变量,  但你可以introduce your own env variable and configure Monolog in your app service provider

答案 2 :(得分:0)

一个很老的问题,但就我而言(Laravel 8,PHP 7.4),这是由于我设置了一个环境变量而造成的

public String getProperty(String key) {
  Object oval = map.get(key);
  String sval = (oval instanceof String) ? (String)oval : null;
  ...
}

指的是使用# /.env LOG_CHANNEL=stack` single通道的日志记录配置...

stderr

# /config/logging.php 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'stderr'], 'ignore_exceptions' => false, ], 是我的问题,删除此问题后,我在phpunit测试中不再看到应用程序日志输出