| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- <?php declare(strict_types=1);
- /*
- * This file is part of the Monolog package.
- *
- * (c) Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Monolog;
- use Psr\Log\LogLevel;
- /**
- * Represents the log levels
- *
- * Monolog supports the logging levels described by RFC 5424 {@see https://datatracker.ietf.org/doc/html/rfc5424}
- * but due to BC the severity values used internally are not 0-7.
- *
- * To get the level name/value out of a Level there are several options:
- *
- * - Use ->getName() to get the standard Monolog name which is full uppercased (e.g. "DEBUG")
- * - Use ->toPsrLogLevel() to get the standard PSR-3 name which is full lowercased (e.g. "debug")
- * - Use ->toRFC5424Level() to get the standard RFC 5424 value (e.g. 7 for debug, 0 for emergency)
- * - Use ->name to get the enum case's name which is capitalized (e.g. "Debug")
- *
- * To get the internal value for filtering, if the includes/isLowerThan/isHigherThan methods are
- * not enough, you can use ->value to get the enum case's integer value.
- */
- enum Level: int
- {
- /**
- * Detailed debug information
- */
- case Debug = 100;
- /**
- * Interesting events
- *
- * Examples: User logs in, SQL logs.
- */
- case Info = 200;
- /**
- * Uncommon events
- */
- case Notice = 250;
- /**
- * Exceptional occurrences that are not errors
- *
- * Examples: Use of deprecated APIs, poor use of an API,
- * undesirable things that are not necessarily wrong.
- */
- case Warning = 300;
- /**
- * Runtime errors
- */
- case Error = 400;
- /**
- * Critical conditions
- *
- * Example: Application component unavailable, unexpected exception.
- */
- case Critical = 500;
- /**
- * Action must be taken immediately
- *
- * Example: Entire website down, database unavailable, etc.
- * This should trigger the SMS alerts and wake you up.
- */
- case Alert = 550;
- /**
- * Urgent alert.
- */
- case Emergency = 600;
- /**
- * @param value-of<self::NAMES>|LogLevel::*|'Debug'|'Info'|'Notice'|'Warning'|'Error'|'Critical'|'Alert'|'Emergency' $name
- * @return static
- */
- public static function fromName(string $name): self
- {
- return match ($name) {
- 'debug', 'Debug', 'DEBUG' => self::Debug,
- 'info', 'Info', 'INFO' => self::Info,
- 'notice', 'Notice', 'NOTICE' => self::Notice,
- 'warning', 'Warning', 'WARNING' => self::Warning,
- 'error', 'Error', 'ERROR' => self::Error,
- 'critical', 'Critical', 'CRITICAL' => self::Critical,
- 'alert', 'Alert', 'ALERT' => self::Alert,
- 'emergency', 'Emergency', 'EMERGENCY' => self::Emergency,
- };
- }
- /**
- * @param value-of<self::VALUES> $value
- * @return static
- */
- public static function fromValue(int $value): self
- {
- return self::from($value);
- }
- /**
- * Returns true if the passed $level is higher or equal to $this
- */
- public function includes(Level $level): bool
- {
- return $this->value <= $level->value;
- }
- public function isHigherThan(Level $level): bool
- {
- return $this->value > $level->value;
- }
- public function isLowerThan(Level $level): bool
- {
- return $this->value < $level->value;
- }
- /**
- * Returns the monolog standardized all-capitals name of the level
- *
- * Use this instead of $level->name which returns the enum case name (e.g. Debug vs DEBUG if you use getName())
- *
- * @return value-of<self::NAMES>
- */
- public function getName(): string
- {
- return match ($this) {
- self::Debug => 'DEBUG',
- self::Info => 'INFO',
- self::Notice => 'NOTICE',
- self::Warning => 'WARNING',
- self::Error => 'ERROR',
- self::Critical => 'CRITICAL',
- self::Alert => 'ALERT',
- self::Emergency => 'EMERGENCY',
- };
- }
- /**
- * Returns the PSR-3 level matching this instance
- *
- * @phpstan-return \Psr\Log\LogLevel::*
- */
- public function toPsrLogLevel(): string
- {
- return match ($this) {
- self::Debug => LogLevel::DEBUG,
- self::Info => LogLevel::INFO,
- self::Notice => LogLevel::NOTICE,
- self::Warning => LogLevel::WARNING,
- self::Error => LogLevel::ERROR,
- self::Critical => LogLevel::CRITICAL,
- self::Alert => LogLevel::ALERT,
- self::Emergency => LogLevel::EMERGENCY,
- };
- }
- /**
- * Returns the RFC 5424 level matching this instance
- *
- * @phpstan-return int<0, 7>
- */
- public function toRFC5424Level(): int
- {
- return match ($this) {
- self::Debug => 7,
- self::Info => 6,
- self::Notice => 5,
- self::Warning => 4,
- self::Error => 3,
- self::Critical => 2,
- self::Alert => 1,
- self::Emergency => 0,
- };
- }
- public const VALUES = [
- 100,
- 200,
- 250,
- 300,
- 400,
- 500,
- 550,
- 600,
- ];
- public const NAMES = [
- 'DEBUG',
- 'INFO',
- 'NOTICE',
- 'WARNING',
- 'ERROR',
- 'CRITICAL',
- 'ALERT',
- 'EMERGENCY',
- ];
- }
|