ログ


    ログ メッセージの書き込み
  • 指定されたチャネルへの書き込み
  • カスタマイズされた Monolog チャネル
    • Monolog 処理チャネルの作成
    • ##ファクトリー経由でチャンネルを作成
    • はじめに

      アプリケーションで何が起こっているかをより深く理解できるように、Laravel はログ メッセージ、システム エラー ログをファイルに記録し、さらには Slack 通知を使用できる強力なログ サービスを提供します。チーム全体。

      Laravel フレームワークでは、Laravel は、さまざまな強力なログ処理のサポートを提供する Monolog ライブラリを使用します。 Laravel ではこれらのハンドラーを簡単に設定できるため、カスタム アプリケーション ログ処理用にハンドラーを組み合わせて使用​​できます。

      構成

      すべてのアプリケーション ロギング システム構成は、config/logging.php にあります。設定ファイルにあります。このファイルを使用すると、アプリケーション ログ チャネルを構成できるため、利用可能な各チャネルとそのオプションを必ず確認してください。もちろん、一般的に使用されるオプションのいくつかを以下で確認します。

      デフォルトでは、Laravel は stack を使用してメッセージをログに記録します。スタック チャネルは、複数のログ チャネルを 1 つのチャネルに集約するために使用されます。スタックの詳細については、次のドキュメントを参照してください。

      チャネル名の構成

      デフォルトでは、Monolog は、production や # など、現在の環境に一致する「チャネル名」を使用してインスタンス化されます。 ##地元###。この値を変更するには、チャネル設定に name オプションを追加します:

      'stack' => [  
        'driver' => 'stack',    
        'name' => 'channel-name',    
        'channels' => ['single', 'slack'],
       ],

      利用可能なチャネルドライバー

      「マルチチャネル」チャネルの作成を容易にするラッパー単一ファイルまたはログ チャネル ベースのパス (毎日ローテーションするモノログ主導のパスモノログ主導の モノログ主導の #errorlogErrorLogHandlermonologcustom

      {ヒント} monolog および custom ドライバーについては、高度なチャネルのカスタマイズ

      # を参照してください。 ##Single および Daily チャネルの構成

      single および daily チャネルには、3 つのオプションの構成項目が含まれています: bubblepermission および locking.

      名前説明
      # # stack
      singleStreamHandler)
      daily RotatingFileHandler
      slackSlackWebhookHandler
      syslogSyslogHandler
      Monolog 駆動の
      任意の Monolog ハンドラー ファクトリ ドライバーを使用できる Monolog
      指定されたファクトリを呼び出してチャネルを作成するドライバー
      名前説明デフォルト値#バブル##true権限644lockingfalse
      ##メッセージが処理された後、メッセージが他のチャネルにプッシュされるかどうかを示します
      ログ ファイルの権限
      書き込み前にログ ファイルのロックを試みます

      Slack チャネルの構成

      slack チャネルには url 構成オプションが必要です。この URL は、Slack チーム用に設定した受信 Webhook と一致する必要があります。

      ##ログ スタックの構築

      前述したように、

      stack ドライバーを使用するとログを記録できます。複数のチャネルを 1 つのチャネルに統合します。運用レベルのアプリケーション構成例を通じて、ログ スタックの使用方法を見てみましょう。 :

      'channels' => [ 
         'stack' => [     
            'driver' => 'stack',        
            'channels' => ['syslog', 'slack'],   
           ],    
            'syslog' => [      
             'driver' => 'syslog',        
             'level' => 'debug',    
            ],    
            'slack' => [       
                'driver' => 'slack',        
                'url' => env('LOG_SLACK_WEBHOOK_URL'),        
                'username' => 'Laravel Log',        
                'emoji' => ':boom:',        
                'level' => 'critical',    
               ],
         ],

      この構成を分析してみましょう。最初に注意すべきことは、

      stack は、 channels オプションを使用して、他の 2 つのチャネル ( syslogslack ) を集約することです。したがって、ログ メッセージを記録する場合、両方のチャネルでログ メッセージの記録を完了する機会があります。

      ログ レベル

      syslog# に注意してください。上の例では ## と slack に存在する level 設定項目です。このオプションは、このチャネルでログを記録する必要があるログの最小「レベル」を決定します。 Monolog (強力な Laravel ログ サービス) は、RFC 5424 仕様で定義されているすべてのレベルを受け入れます: emergencyalertcriticalerror警告通知情報、およびデバッグ

      debug

      メソッドを使用してログ メッセージを記録すると仮定します。

      Log::debug('An informational message.');
      構成によれば、

      syslog

      チャネルはメッセージをシステム ログ; ただし、エラー メッセージは critical 以上ではないため、Slack には送信されません。 emergency メッセージをログに記録すると、emergency のレベルが両方のチャネルの最低レベル制限よりも高いため、メッセージは syslog と Slack に送信されます:

      Log::emergency('The system is down!');

      ログ メッセージの書き込み

      Log

      ファサードを使用して、情報をログに書き込むことができます。前に述べたように、ロギングでは、RFC 5424 仕様で定義されている利用可能なロギング レベル (emergencyalertcriticalerror、#) が提供されます。 ##warningnoticeinfo、および debug:

      Log::emergency($message);
      Log::alert($message);
      Log::critical($message);
      Log::error($message);
      Log::warning($message);
      Log::notice($message);
      Log::info($message);
      Log::debug($message);
      したがって、これらのメソッドのいずれかを呼び出すことができます。メソッドのレコードは対応するログのレベル。デフォルトでは、メッセージは config/logging.php

      設定ファイルで定義されているデフォルトのログ チャネルに書き込まれます:

      <?php
         namespace App\Http\Controllers;use App\User;
         use Illuminate\Support\Facades\Log;
         use App\Http\Controllers\Controller;
         class UserController extends Controller{   
          /**
           * 显示给定用户的配置信息。
           *
           * @param  int  $id
           * @return Response
           */  
          public function showProfile($id)  
            {     
               Log::info('Showing user profile for user: '.$id);        
               return view('user.profile', ['user' => User::findOrFail($id)]);   
             }
          }

      コンテキスト情報
      Youコンテキスト データの配列を log メソッドに渡すことができます。情報はフォーマットされて、ログ メッセージとともに表示されます:

      Log::info('User failed to login.', ['id' => $user->id]);

      指定したチャネルに書き込む

      アプリケーションのデフォルト チャネル以外のチャネルにメッセージを書き込みたい場合があります。 Log ファサードの channel メソッドを使用して、構成ファイルで定義されている任意のチャネルを取得し、そこにメッセージを書き込むことができます。複数のチャンネルで構成されるチャンネル チャンネルで構成されるオンデマンド録画スタックでは、

      stack

      メソッドを使用できます:

      Log::channel('slack')->info('Something happened!');

      高度にカスタマイズされた Monolog チャネル

      チャネルの Monolog のカスタマイズ

      既存のチャネルの Monolog を完全に制御する必要がある場合があります。 : たとえば、特定のチャネルのログ処理用にカスタム Monolog

      FormatterInterface

      実装を構成するには: 最初にチャネル構成で

      tap

      配列を定義します。 。 tap 配列には、チャネルの作成後に Monolog インスタンスをカスタマイズするために使用できるクラスのリストが含まれています。

      Log::stack(['single', 'slack'])->info('Something happened!');

      tap

      オプションが設定されると、カスタム Monolog インスタンスのクラスを準備するには、チャネルで構成します。このクラスにはメソッド __invoke が必要です。このメソッドは Illuminate\Log\Logger インスタンスをパラメータとして受け取ります。 Illuminate\Log\Logger インスタンスは、基礎となる Monolog インスタンスへのすべてのメソッド呼び出しをプロキシします:

      'single' => [   
       'driver' => 'single',    
       'tap' => [App\Logging\CustomizeFormatter::class],    
       'path' => storage_path('logs/laravel.log'),    
       'level' => 'debug',
      ],

      {tip} すべての「タップ」クラスはサービス コンテナーによって解決されるため、それらに依存するコンストラクターは自動的に挿入されます。

      Monolog プロセッサ チャネルの作成

      Monolog にはさまざまなプロセッサが用意されています。場合によっては、特定のプロセッサを使用して Monolog 駆動のログ タイプのみを作成したい場合があります。これらのチャネルは、

      monolog

      ドライバーを使用して作成できます。

      monolog

      ドライバーを使用する場合、インスタンス化されたプロセッサーを指定するために handler 構成項目が使用されます。プロセッサのコンストラクターにパラメーターが必要な場合は、オプションの with 構成項目を使用して次のように指定できます。

      <?php
         namespace App\Logging;
         class CustomizeFormatter{   
          /**
           * 自定义给定的日志实例。
           *
           * @param  \Illuminate\Log\Logger  $logger
           * @return void
           */   
         public function __invoke($logger)   
          {      
            foreach ($logger->getHandlers() as $handler) {        
                $handler->setFormatter(...);      
               }  
            }
         }

      Monolog formatting

      Use

      monolog

      駆動されると、Monolog の LineFormatter がデフォルトのフォーマッタとして使用されます。もちろん、formatter および formatter_with 設定項目を使用して、フォーマット プロセッサ タイプをカスタマイズすることもできます。

      'logentries' => [   
       'driver'  => 'monolog',    
       'handler' => Monolog\Handler\SyslogUdpHandler::class,    
       'with' => [      
         'host' => 'my.logentries.internal.datahubhost.company.com',        
         'port' => '10000',   
         ],
        ],
      使用する Monolog プロセッサが独自のフォーマット生成を提供できる場合プロセッサの場合、

      formatter

      構成項目を default:

      'browser' => [  
        'driver' => 'monolog',    
        'handler' => Monolog\Handler\BrowserConsoleHandler::class,    
        'formatter' => Monolog\Formatter\HtmlFormatter::class,    
        'formatter_with' => [      
          'dateFormat' => 'Y-m-d',  
          ],
        ],

      として指定できます。

      ファクトリーを介したチャネルの作成

      完全なカスタム チャネルを定義する場合は、Monolog のインスタンス化と構成を完全に制御できます。config/logging.php で構成できます。ファイル内の custom ドライバーの種類。設定には、Monolog インスタンスを作成するために呼び出されるファクトリ クラスを指す via オプションが含まれている必要があります。

      'newrelic' => [ 
         'driver' => 'monolog',    
         'handler' => Monolog\Handler\NewRelicHandler::class,    
         'formatter' => 'default',
      ],

      custom チャネルが設定されたら、次のことができます。 Monolog インスタンスの作成クラスを定義します。このクラスに必要なメソッドは __invoke の 1 つだけです。このメソッドは Monolog インスタンスを返すことができます:

      'channels' => [  
        'custom' => [      
          'driver' => 'custom',        
          'via' => App\Logging\CreateCustomLogger::class,   
          ],
       ],
      この記事は、LearnKu.com Web サイトで最初に公開されました。