Laravel 5 开发和生产的不同日志级别
Laravel 5 different log levels for development and production
我正在使用 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);
但是,在我的生产环境中,我只想记录 Error
、Critical
、Alert
或 Emergency
优先级的任何内容,并忽略日志请求优先级较低。
我无法在文档中或通过探索代码(Log
外观和 Monolog
class)找到任何内容。
我目前的想法是围绕 Log facade 创建一个自定义包装器,它只检查环境并忽略低于 400(错误的 Monolog 级别)的任何内容。基本上我会在环境文件中创建一个阈值变量,它下面的任何内容都不会被记录到文件中。
在我这样做之前,我想问问社区是否有现有的 method/configuration 我可以使用,这样我就不会重新发明轮子。
如果不是 - 最好的方法是什么?
将以下代码添加到您的 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.
上面的代码尚未经过测试,所以如果您发现任何错别字或无法正常工作,请告诉我,我们将非常乐意为您解决。
这个 gist 显示了一个更舒适的答案,因为它不依赖于
选择的处理程序。
我只是在此处提供答案中的重要部分,以防上面的 link 在某些时候被删除。
在 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.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);
但是,在我的生产环境中,我只想记录 Error
、Critical
、Alert
或 Emergency
优先级的任何内容,并忽略日志请求优先级较低。
我无法在文档中或通过探索代码(Log
外观和 Monolog
class)找到任何内容。
我目前的想法是围绕 Log facade 创建一个自定义包装器,它只检查环境并忽略低于 400(错误的 Monolog 级别)的任何内容。基本上我会在环境文件中创建一个阈值变量,它下面的任何内容都不会被记录到文件中。
在我这样做之前,我想问问社区是否有现有的 method/configuration 我可以使用,这样我就不会重新发明轮子。
如果不是 - 最好的方法是什么?
将以下代码添加到您的 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.
上面的代码尚未经过测试,所以如果您发现任何错别字或无法正常工作,请告诉我,我们将非常乐意为您解决。
这个 gist 显示了一个更舒适的答案,因为它不依赖于 选择的处理程序。
我只是在此处提供答案中的重要部分,以防上面的 link 在某些时候被删除。
在 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.