1

我遇到了一个日志递归问题,我只想为单个操作禁用日志。Laravel 日志是否有任何类型的运行时开关?像:

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

不幸的是,没有办法像上面的例子那样通过外观来做到这一点。暂时关闭 Laravel 日志的最佳方法是什么?

4

2 回答 2

3

这是一个 hacky 方法。用模拟交换外观实例。

嘲讽:_

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

// bypass log here

Log::swap($app);

没有嘲讽:

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

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

// bypass log here

Log::swap($app);
于 2014-08-18T09:06:09.027 回答
0

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

<?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);
});
于 2014-08-18T12:58:53.847 回答