ログ
- ログ メッセージの書き込み
- 指定されたチャネルへの書き込み
- カスタマイズされた 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'], ],
利用可能なチャネルドライバー
名前 説明 # # stack 「マルチチャネル」チャネルの作成を容易にするラッパーsingle 単一ファイルまたはログ チャネル ベースのパス (StreamHandler )
daily 毎日ローテーションするモノログ主導のパスRotatingFileHandler slack モノログ主導のSlackWebhookHandler syslog モノログ主導のSyslogHandler #errorlog ErrorLogHandlermonolog 任意の Monolog ハンドラー ファクトリ ドライバーを使用できる Monolog
custom 指定されたファクトリを呼び出してチャネルを作成するドライバー
# を参照してください。 ##Single および Daily チャネルの構成{ヒント}
monolog
およびcustom
ドライバーについては、高度なチャネルのカスタマイズsingle
および
dailyチャネルには、3 つのオプションの構成項目が含まれています:
bubble、
permissionおよび
locking.
名前 説明 デフォルト値 #バブル ##true##メッセージが処理された後、メッセージが他のチャネルにプッシュされるかどうかを示します
権限ログ ファイルの権限 644 locking書き込み前にログ ファイルのロックを試みます falseSlack チャネルの構成
##ログ スタックの構築前述したように、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 つのチャネル (
syslogと
slack) を集約することです。したがって、ログ メッセージを記録する場合、両方のチャネルでログ メッセージの記録を完了する機会があります。
syslog# に注意してください。上の例では ## と
debugslack
に存在するlevel
設定項目です。このオプションは、このチャネルでログを記録する必要があるログの最小「レベル」を決定します。 Monolog (強力な Laravel ログ サービス) は、RFC 5424 仕様で定義されているすべてのレベルを受け入れます:emergency
、alert、critical、error、 警告、通知、情報、およびデバッグ。メソッドを使用してログ メッセージを記録すると仮定します。
syslog
構成によれば、Log::debug('An informational message.');
チャネルはメッセージをシステム ログ; ただし、エラー メッセージは
critical
以上ではないため、Slack には送信されません。emergency
メッセージをログに記録すると、emergency
のレベルが両方のチャネルの最低レベル制限よりも高いため、メッセージは syslog と Slack に送信されます:Log::emergency('The system is down!');
ログ メッセージの書き込みファサードを使用して、情報をログに書き込むことができます。前に述べたように、ロギングでは、RFC 5424 仕様で定義されている利用可能なロギング レベル (
emergency
、alert、critical、error、#) が提供されます。 ##warning、notice、info、および 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]);
指定したチャネルに書き込む
アプリケーションのデフォルト チャネル以外のチャネルにメッセージを書き込みたい場合があります。
stackLog
ファサードのchannel
メソッドを使用して、構成ファイルで定義されている任意のチャネルを取得し、そこにメッセージを書き込むことができます。複数のチャンネルで構成されるチャンネル チャンネルで構成されるオンデマンド録画スタックでは、メソッドを使用できます:
Log::channel('slack')->info('Something happened!');
高度にカスタマイズされた Monolog チャネルチャネルの Monolog のカスタマイズ既存のチャネルの Monolog を完全に制御する必要がある場合があります。 : たとえば、特定のチャネルのログ処理用にカスタム Monolog
FormatterInterface実装を構成するには:
tap最初にチャネル構成で
配列を定義します。 。
taptap
配列には、チャネルの作成後に Monolog インスタンスをカスタマイズするために使用できるクラスのリストが含まれています。Log::stack(['single', 'slack'])->info('Something happened!');
オプションが設定されると、カスタム Monolog インスタンスのクラスを準備するには、チャネルで構成します。このクラスにはメソッド
{tip} すべての「タップ」クラスはサービス コンテナーによって解決されるため、それらに依存するコンストラクターは自動的に挿入されます。__invoke
が必要です。このメソッドはIlluminate\Log\Logger
インスタンスをパラメータとして受け取ります。Illuminate\Log\Logger
インスタンスは、基礎となる Monolog インスタンスへのすべてのメソッド呼び出しをプロキシします:'single' => [ 'driver' => 'single', 'tap' => [App\Logging\CustomizeFormatter::class], 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', ],
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 formattingUse
monolog駆動されると、Monolog の
formatterLineFormatter
がデフォルトのフォーマッタとして使用されます。もちろん、formatter
およびformatter_with
設定項目を使用して、フォーマット プロセッサ タイプをカスタマイズすることもできます。
使用する Monolog プロセッサが独自のフォーマット生成を提供できる場合プロセッサの場合、'logentries' => [ 'driver' => 'monolog', 'handler' => Monolog\Handler\SyslogUdpHandler::class, 'with' => [ 'host' => 'my.logentries.internal.datahubhost.company.com', 'port' => '10000', ], ],
構成項目を
として指定できます。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, ], ],