web-dev-qa-db-ja.com

Laravel開発と本番用の5つの異なるログレベル

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);

ただし、本番環境では、優先度がErrorCriticalAlert、またはEmergencyのすべてのもののみをログに記録し、ログ要求を無視したいと思います。優先度が低い。

ドキュメントやコード(LogファサードとMonologクラスの両方)を調べても何も見つかりませんでした。

私の現在の考えは、単に環境をチェックし、400(エラーのモノログレベル)未満のものを無視する、ログファサードの周りにカスタムラッパーを作成することです。基本的に、環境ファイルにしきい値変数を作成し、それより下の変数はファイルに記録されません。

そうする前に、私が使用できる既存のメソッド/構成があるかどうかをコミュニティに尋ねて、車輪の再発明をしないようにしたいと思いました。

そうでない場合-最善のアプローチは何でしょうか?

11
dev7

この 要点 は、選択したハンドラーに依存しないため、より快適な答えを示しています。

上記のリンクがいつか削除された場合に備えて、ここで回答の重要な部分を提供しています。

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

次のコードを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));
});

これにより、Laraveldailyハンドラーを設定するときに行うロジックが再作成されますが、ハンドラーに受け渡しレベルが追加されます。

config/app.phplevel valueを設定することで、最小ログレベルを設定できます。

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

これは少し回避策であり、各タイプのハンドラーを個別に設定する必要があります。私は現在、Laravelへのプルリクエストに取り組んでいます。これにより、AppServiceProviderにコード行を記述せずに、構成ファイルから最小デバッグレベルの設定が追加されます。

上記のコードはテストされていないので、タイプミスや何かが正しく機能しない場合はお知らせください。喜んでそれを機能させます。

2
jedrzej.kurylo