Speicher/Protokolle/st"/> Speicher/Protokolle/st">
Heim >Backend-Entwicklung >PHP-Tutorial >Split -Protokollspiegel zwischen STDOut und Stderr mit Laravel
Haben Sie jemals darüber nachgedacht, ein bestimmtes Niveau in Laravel zu protokollieren? Natürlich können Sie die Option level
Konfiguration verwenden, um die minimale -Pegel für Protokoll zu geben. Aber was ist, wenn Sie nur das und Debug
Protokoll in einen bestimmten Logger protokollieren möchten? Info
und stdout
teilen. Mithilfe von Tools wie Laravel Zero oder Artisan haben Sie möglicherweise den folgenden Befehl, um zu demonstrieren, dass nur das Senden von stderr
an einen Ort sendet: stderr
php artisan my-command 2> storage/logs/stderr.logDann könnte das
-Protokoll wie folgt aussehen: 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>
-Protokoll enthält Protokollinformationen auf den Ebenen stdout
und INFO
. DEBUG
zu verwenden, wodurch nur die angegebene Aufzeichnungsstufe durch den verpackten Handler geleitet werden kann. Ein direktes Beispiel ist wie folgt: 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] );Um zu veranschaulichen, wie Sie
in der Konfigurationsdatei logging.php
von Laravel konfigurieren, wird hier ein benannter Parameter verwendet. Wir können die folgenden Konfigurationsänderungen in den Protokollkanälen FilterHandler
und stderr
verwenden (oder neue Kanäle erstellen), indem wir den Treiber stdout
verwenden: 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], ], ], ];Bitte beachten Sie, wie stimmt die Taste
mit den benannten Parametern des with
-Konstruktors überein? FilterLogger
Der Logger zeichnet Debug- und Informationsprotokolle auf, während der stdout
-Protokollger auf stderr
festgelegt wird, um eine Benachrichtigung oder höhere CLI -Fehler zu erfassen. level
notice
Ich möchte auch darauf hinweisen, dass das Monolog Verschlüsse des
Instanzen nur dann erstellt wird, wenn der Protokollkanal verwendet wird: FilterHandler
StreamHandler
'handler' => fn () => new StreamHandler('php://stdout'),-Datei erklärt wurde:
docker-compose.yaml
services: cli: build: context: . dockerfile: build/Dockerfile # 不要将任何消息输出到控制台。 # 只会发送日志。 command: ["daemon", "--quiet"] environment: LOG_CHANNEL: "stack" LOG_LEVEL: "info" LOG_STACK: "stdout,stderr" LOG_STDOUT_FORMATTER: "\Monolog\Formatter\JsonFormatter" LOG_STDERR_FORMATTER: "\Monolog\Formatter\JsonFormatter"behandelt.
logging.php
Sie können mehr über die Protokollierung in der Laravel -Anwendung in der offiziellen Dokumentation erfahren.
Das obige ist der detaillierte Inhalt vonSplit -Protokollspiegel zwischen STDOut und Stderr mit Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!