Laravel 5种不同的日志级别用于开发和生产


Laravel 5 different log levels for development and production

我正在使用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);

然而,在我的生产环境中,我只想记录ErrorCriticalAlertEmergency优先级的任何内容,而忽略优先级较低的日志请求。

我在文档或通过探索代码(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中编写一行代码。

上面的代码还没有经过测试,所以让我知道,如果你看到任何打字错误或某些东西不能正常工作,我将非常乐意为您工作。

相关文章: