如何临时禁用laravel日志?

时间:2014-08-18 05:15:44

标签: logging laravel monolog

我感觉到日志递归问题,我想只为一次操作禁用日志。 Laravel日志是否有任何类型的运行时切换?像:

<?php
Log::stop();
// bypass log here
Log::resume();

不幸的是,没有办法通过外观像上面的例子那样做。什么是暂时关闭Laravel注册的最佳方式?

2 个答案:

答案 0 :(得分:3)

这是一种愚蠢的方法。使用模拟交换Facade实例。

使用Mockery

$app = Log::getFacadeRoot();
Log::shouldReceive('error', 'warning', 'debug', 'info', 'notice', 'critical', 'alert', 'emergency');

// bypass log here

Log::swap($app);

没有Mockery:

class LogMock {
    public function __call($name, $arguments) {}
}

$app = Log::getFacadeRoot();
Log::swap(new LogMock);

// bypass log here

Log::swap($app);

答案 1 :(得分:0)

如果您要注册自定义侦听器,另一种可能的(不太通用的)解决方案是使用Config facade来存储状态并绕过给定的回调:

<?php

Event::listen('illuminate.query', function($query, $bindings, $time, $name){
    if(Config::get('log.enabled', true)){
        Log::info($query, ['context' => ['bindings' => $bindings]]);
    }
});

Log::listen(function($level, $message, $context) {
    Config::set('log.enabled', false);
    // do something bypassing listener who expects log.enabled 
    Config::set('log.enabled', true);
});