Avez-vous déjà pensé à enregistrer un niveau spécifique dans Laravel? Bien sûr, vous pouvez utiliser l'option de configuration level
pour spécifier le niveau minimum pour vous connecter, mais que se passe-t-il si vous souhaitez simplement enregistrer les connexions et Debug
dans un enregistreur spécifique? Info
et stdout
. En utilisant des outils comme Laravel Zero ou Artisan, vous pouvez avoir la commande suivante pour démontrer que l'envoi de journaux stderr
à un emplacement: stderr
php artisan my-command 2> storage/logs/stderr.log
peut ressembler à ceci: 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>
contient des informations de journal aux niveaux stdout
et INFO
. DEBUG
, ce qui permet uniquement au niveau donné d'enregistrements de passer par le gestionnaire enveloppé. Un exemple direct est le suivant: 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] );
dans le fichier de configuration logging.php
de Laravel, un paramètre nommé est utilisé ici. Nous pouvons utiliser les modifications de configuration suivantes aux canaux de journal FilterHandler
et stderr
(ou créer de nouveaux canaux), en utilisant le pilote stdout
: 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], ], ], ];
correspond-elle aux paramètres nommés du constructeur with
? FilterLogger
L'enregistreur enregistrera les journaux de débogage et d'informations, tandis que le bûcheron stdout
est défini sur stderr
pour prendre toute notification ou des erreurs de CLI plus élevées. level
notice
Je tiens également à souligner que Monolog accepte les fermetures du gestionnaire
soient créées uniquement lors de l'utilisation du canal de journal: FilterHandler
StreamHandler
'handler' => fn () => new StreamHandler('php://stdout'),
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"
logging.php
Vous pouvez en savoir plus sur la connexion dans l'application Laravel dans la documentation officielle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!