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

Posted

技术标签:

【中文标题】Laravel 5 种用于开发和生产的不同日志级别【英文标题】:Laravel 5 different log levels for development and production 【发布时间】:2015-11-17 01:00:39 【问题描述】:

我正在使用 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 级别)。基本上我会在环境文件中创建一个阈值变量,低于它的任何内容都不会被记录到文件中。

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

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

【问题讨论】:

您使用的是哪个记录器? “单”、“每日”、“系统日志”还是“错误日志”?不幸的是,解决方案取决于使用的记录器。 @jedrzej.kurylo 我正在使用Daily 【参考方案1】:

将以下代码添加到您的 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 中编写一行代码。

上面的代码尚未经过测试,所以如果您发现任何拼写错误或无法正常工作,请告诉我,我非常乐意为您解决问题。

【讨论】:

L5 日志记录(在 Linux 上)存在问题,如果您从命令行notweb 用户的身份运行 artisan >,可能会创建一个无法由 Web 服务器 写入的日志文件。我已经提交了修复该问题的拉取请求,但被告知改用configureMonologUsing()。所以请注意chmod 你的日志文件也在那里。 ;)【参考方案2】:

这个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.

【讨论】:

以上是关于Laravel 5 种用于开发和生产的不同日志级别的主要内容,如果未能解决你的问题,请参考以下文章

2021-03-16鸿蒙开发(四.二)

如何在 laravel 中为开发和生产使用不同的 cors 配置

Laravel 排队作业的问题。开发和生产的奇怪行为不同

Logcat的级别以及Logcat的调试使用

Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别)

日志等级