Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5种不同的开发和生产日志级别_Php_Laravel_Logging_Laravel 5_Monolog - Fatal编程技术网

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

Php Laravel 5种不同的开发和生产日志级别,php,laravel,logging,laravel-5,monolog,Php,Laravel,Logging,Laravel 5,Monolog,我正在使用Laravel5.1,并试图为开发和生产环境设置不同的日志记录逻辑 在我的整个应用程序中,我使用了Logfacade和以下大多数不同的方法: Log::emergency($error); Log::alert($error); Log::critical($error); Log::error($error); Log::warning($error); Log::notice($error); Log::info($error); Log::debug($error); 但是,在

我正在使用Laravel5.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);
但是,在我的生产环境中,我只想记录
错误
严重
警报
紧急
优先级的任何内容,并忽略优先级较低的日志请求

我在文档中找不到任何东西,也没有通过探索代码(包括
Log
facade和
monog
类)

我目前的想法是围绕日志外观创建一个自定义包装器,它只检查环境并忽略400以下的任何内容(Monolog级别的错误)。基本上,我会在环境文件中创建一个阈值变量,低于它的任何内容都不会被记录到文件中

在我这么做之前,我想问问社区是否有一个我可以使用的现有方法/配置,这样我就不会再发明轮子了


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

将以下代码添加到您的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));
});
'level' => 'debug', //debug, info, notice, warning, error, critical, alert, emergency
这重新创建了Laravel在设置每日处理程序时所执行的逻辑,但为处理程序添加了传递级别

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

$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));
});
'level' => 'debug', //debug, info, notice, warning, error, critical, alert, emergency
这是一种变通方法,每种类型的处理程序都需要单独设置。我目前正在处理对Laravel的拉取请求,该请求将从配置文件中添加设置最低调试级别,而无需在AppServiceProvider中编写一行代码

上面的代码还没有经过测试,所以如果您发现任何拼写错误或某些错误,请告诉我,我将非常乐意为您提供帮助。

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

我只是在这里提供一个答案的基本部分,以防上面的链接在一段时间内被删除

在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.

您正在使用哪个记录器?“单一”、“每日”、“系统日志”或“错误日志”?不幸的是,解决方案取决于所使用的记录器。@jedrzej.kurylo我每天使用的
日志记录(在Linux上)存在一个问题,即如果您不是以web用户的身份从命令行运行
artisan
,可能会创建一个web服务器无法写入的日志文件。我已经提交了一个拉取请求来解决这个问题,但是被告知使用
configuremonogusing()
。因此,请注意并
chmod
您的日志文件也在其中