我正在使用Laravel 5.1,并试图为开发和生产环境设置不同的日志逻辑。
在我的整个应用程序中,我使用Log
facade与以下大多数不同的方法:
Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);
然而,在我的生产环境中,我只想记录Error
、Critical
、Alert
或Emergency
优先级的任何内容,而忽略优先级较低的日志请求。
我在文档或通过探索代码(Log
外观和Monolog
类)中找不到任何东西。
我目前的想法是在Log外观周围创建一个自定义包装器,简单地检查环境并忽略低于400的任何内容(独白级别为错误)。基本上,我会在环境文件中创建一个阈值变量,低于该值的任何内容都不会被记录到文件中。
在我这样做之前,我想问一下社区是否有现成的方法/配置可以使用,这样我就不用重新发明轮子了。
如果不是,最好的方法是什么?
这个要点显示了一个更舒服的答案,因为不依赖于选择处理程序。
我只是在这里提供一个答案的重要部分,以防上面的链接在某个时间被删除。
在AppServiceProviders的register方法中:
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
$monolog = Log::getMonolog();
foreach($monolog->getHandlers() as $handler) {
$handler->setLevel(Config::get('app.log-level'));
}
}
然后在config/app.php中添加一个额外的键:
'log-level' => 'info', // or whatever minimum log level you would like.
将以下代码添加到AppServiceProvider::register():
$this->app->configureMonologUsing(function ($monolog) {
$monolog->pushHandler(
$handler = new RotatingFileHandler(
$this->app->storagePath() . '/logs/laravel.log',
$this->app->make('config')->get('app.log_max_files', 5),
$this->app->make('config')->get('app.level', 'debug')
)
);
$handler->setFormatter(new LineFormatter(null, null, true, true));
});
这将重新创建Laravel在设置daily处理程序时所做的逻辑,但将传递级别添加到处理程序中。
您可以通过在config/app.php:中设置level值来设置您的最低日志级别
'level' => 'debug', //debug, info, notice, warning, error, critical, alert, emergency
这有点变通,每种类型的处理程序都需要单独设置。我目前正在对Laravel进行拉请求,这将从配置文件中添加设置最低调试级别,而无需在AppServiceProvider中编写一行代码。
上面的代码还没有经过测试,所以让我知道,如果你看到任何打字错误或某些东西不能正常工作,我将非常乐意为您工作。