Laravel 5个不同的开发和生产日志级别

时间:2015-08-23 15:10:39

标签: php laravel logging laravel-5 monolog

我正在使用Laravel 5.1并尝试为开发和生产环境设置不同的日志记录逻辑。

在我的整个应用程序中,我使用Log外观以及以下大多数不同的方法:

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以下的任何内容(Monolog级别为Error)。基本上我会在环境文件中创建一个阈值变量,其下面的任何内容都不会记录到文件中。

在我这样做之前,我想询问社区是否存在我可以使用的现有方法/配置,以便我不会重新发明轮子。

如果不是 - 最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

这个gist显示了一个更舒服的答案,因为它不依赖于 选择了处理程序。

我只是在答案中提供必要部分,以防上述链接在一段时间内被删除。

在AppServiceProviders的注册方法中:

/**
* 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.

答案 1 :(得分:2)

将以下代码添加到 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 在设置每日处理程序时所执行的逻辑,但会将传递级别添加到处理程序中。

您可以通过在 config / app.php 中设置级别值来设置最低日志记录级别:

'level' => 'debug', //debug, info, notice, warning, error, critical, alert, emergency

这是一种解决方法,每种类型的处理程序都需要单独设置。我目前正在处理对 Laravel 的拉取请求,该请求会在配置文件中添加设置最低调试级别,而无需在 AppServiceProvider 中编写一行代码。< / p>

上面的代码尚未经过测试,如果您发现任何拼写错误或某些内容无法正常运行,请告诉我们,我们非常乐意为您完成这项工作。< / p>