我正在为Laravel应用程序编写测试,专门用于在控制台上写入大量日志消息的进程。
e.g。
Log::info('Process starts', [
'process_name' => 'product_import',
'data' => // a huge text containing json_encode of the given message object
]
当我运行phpunit时,我在控制台上看到所有这些烦人的日志消息。有没有办法禁用或以某种方式停止这些日志消息?
答案 0 :(得分:1)
如果要在某些指定的测试方法或类中关闭登录,可以模拟Log
外观。
答案 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测试中不再看到应用程序日志输出