好吧,我认为现在搜索所有Log::info() 并按照@jon__o 提出的答案为时已晚
if (App::environment('local', 'staging')) {
Log::info($error);
}
但是你仍然可以做一些事情。你可以用你自己的实现覆盖默认的 Laravel 记录器实例。
转到您的 ApplicationServiceProvider 并使用自定义实例覆盖 log 实例:
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->registerLogger();
}
/**
* Register the logger instance in the container.
*
* @return MyCustomWriter
*/
protected function registerLogger()
{
$this->app->instance('log', $log = new MyCustomWriter(
new Monolog($this->app->environment()), $app['events'])
);
$log->dontLogInfoOnEnvironmnets(['production', 'staging', 'other']);
return $log;
}
现在您可以通过扩展 Laravel 的 Writer 并覆盖 info() 方法来创建自定义编写器。
class MyCustomWriter extends \Illuminate\Log\Writer
{
protected $dontInfoOn = [];
/**
* Log an informational message to the logs.
*
* @param string $message
* @param array $context
* @return void
*/
public function info($message, array $context = [])
{
// Since we are providing the app environment to the Monolog instance in out ApplicationServiceProvider
// we can get the environment from the Monolog getName() method
if(!in_array($this->monolog->getName(), $this->dontInfoOn)) {
return parent::info($message, $context);
}
}
/**
* Don't log info() on the supplied environments .
*
* @param array $environments
* @return void
*/
public function dontLogInfoOnEnvironmnets(array $environments)
{
$this->dontInfoOn = $environments;
}
}
这样,您仍然可以将Log::info 留在测试环境中,而无需每次都检查。