ホームページ >バックエンド開発 >PHPチュートリアル >laravelを使用して、stdoutとstderrの間にログレベルを分割します
Laravelで特定のレベルを記録することを考えたことがありますか?もちろん、level
構成オプションを使用してログに最小レベルを指定できますが、特定のロガーにログを記録するだけの場合はどうなりますか?
CLIコマンドを書いていて、ログをDebug
とInfo
に分割したいとします。 Laravel ZeroやArtisanのようなツールを使用して、
stdout
次に、stderr
ログは次のようになるかもしれません:stderr
php artisan my-command 2> storage/logs/stderr.log
logには、stderr
および
<code>[2024-10-01 02:48:49] development.ERROR: The daemon has run too many times. (6 times now, come on!) [2024-10-01 02:48:52] development.ERROR: The daemon has run too many times. (7 times now, come on!) ...</code>
LARAVELを設定して、ログレベルをフィルタリングしますstdout
Laravelロガーを分割するように設定するトリックは、ログを分割することです。モノログのINFO
を使用することです。これにより、与えられたレベルのレベルのみがラップされたハンドラーを通過できます。直接的な例は次のとおりです
DEBUG
およびFilterHandler
ログチャネル(または新しいチャンネルを作成)に使用できます。
use Monolog\Handler\FilterHandler; use Monolog\Handler\StreamHandler; use Monolog\Level; // 使用最小和最大级别参数 $handler = new FilterHandler( handler: new StreamHandler('php://stdout'), minLevelOrList: Level::Debug, maxLevel: Level::Info, ); // 使用列表 $handler = new FilterHandler( handler: new StreamHandler('php://stdout'), minLevelOrList: [Level::Debug, Level::Info] );
キーは、logging.php
コンストラクターの指定されたパラメーターとどのように一致していますか? FilterHandler
ロガーはデバッグと情報ログを記録しますが、stderr
ロガーはstdout
に設定されて、通知またはより高いCLIエラーをキャッチします。 stack
<?php return [ 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => explode(',', env('LOG_STACK', 'stdout,stderr')), 'ignore_exceptions' => false, ], 'stdout' => [ 'driver' => 'monolog', 'handler' => \Monolog\Handler\FilterHandler::class, 'formatter' => env('LOG_STDOUT_FORMATTER'), 'with' => [ 'handler' => fn () => new StreamHandler('php://stdout'), 'minLevelOrList' => [Monolog\Level::Debug, Monolog\Level::Info], ], 'processors' => [PsrLogMessageProcessor::class], ], 'stderr' => [ 'driver' => 'monolog', 'handler' => StreamHandler::class, 'formatter' => env('LOG_STDERR_FORMATTER'), 'with' => [ 'stream' => 'php://stderr', ], 'level' => 'notice', 'processors' => [PsrLogMessageProcessor::class], ], ], ];ハンドラーの閉鎖を受け入れていることを指摘したいと思います。これにより、ラッピング
インスタンスは、ログチャネルを使用する場合にのみ作成されます。
with
この方法でログをキャッチすることは、コンテナからログサービスにログを送信する際のヘッドレス/デーモンCLIコマンドに役立ちます。たとえば、JSONを使用してエラーログをフォーマットして、DataDogのようなサービスを使用できるようにします。これがあなたが持っているかもしれない環境のセットアップの例です、FilterLogger
ファイルで説明されています:stdout
stderr
level
Monologは、Laravelで構成するために使用できる多くのハンドラー、フォーマッタ、およびプロセッサを提供し、すべての一般的なユースケースはnotice
構成ファイルで既にカバーされています。
公式文書のLaravelアプリケーションのログの詳細について詳しく知ることができます。 FilterHandler
以上がlaravelを使用して、stdoutとstderrの間にログレベルを分割しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。