| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?php
- namespace App\Module\ThirdParty\Enums;
- /**
- * 第三方服务日志级别枚举
- */
- enum LOG_LEVEL: string
- {
- case DEBUG = 'DEBUG'; // 调试级别
- case INFO = 'INFO'; // 信息级别
- case WARNING = 'WARNING'; // 警告级别
- case ERROR = 'ERROR'; // 错误级别
- case CRITICAL = 'CRITICAL'; // 严重错误级别
- /**
- * 获取日志级别的中文描述
- *
- * @return string
- */
- public function getLabel(): string
- {
- return match ($this) {
- self::DEBUG => '调试',
- self::INFO => '信息',
- self::WARNING => '警告',
- self::ERROR => '错误',
- self::CRITICAL => '严重错误',
- };
- }
- /**
- * 获取日志级别的详细描述
- *
- * @return string
- */
- public function getDescription(): string
- {
- return match ($this) {
- self::DEBUG => '调试信息,用于开发和调试阶段',
- self::INFO => '一般信息,记录正常的操作流程',
- self::WARNING => '警告信息,可能存在问题但不影响正常运行',
- self::ERROR => '错误信息,操作失败但系统可以继续运行',
- self::CRITICAL => '严重错误,系统可能无法正常运行',
- };
- }
- /**
- * 获取日志级别的颜色
- *
- * @return string
- */
- public function getColor(): string
- {
- return match ($this) {
- self::DEBUG => 'secondary',
- self::INFO => 'primary',
- self::WARNING => 'warning',
- self::ERROR => 'danger',
- self::CRITICAL => 'dark',
- };
- }
- /**
- * 获取日志级别的图标
- *
- * @return string
- */
- public function getIcon(): string
- {
- return match ($this) {
- self::DEBUG => 'fa-bug',
- self::INFO => 'fa-info-circle',
- self::WARNING => 'fa-exclamation-triangle',
- self::ERROR => 'fa-times-circle',
- self::CRITICAL => 'fa-skull-crossbones',
- };
- }
- /**
- * 获取日志级别的数值(数字越大级别越高)
- *
- * @return int
- */
- public function getLevel(): int
- {
- return match ($this) {
- self::DEBUG => 1,
- self::INFO => 2,
- self::WARNING => 3,
- self::ERROR => 4,
- self::CRITICAL => 5,
- };
- }
- /**
- * 检查是否为错误级别
- *
- * @return bool
- */
- public function isError(): bool
- {
- return in_array($this, [self::ERROR, self::CRITICAL]);
- }
- /**
- * 检查是否需要告警
- *
- * @return bool
- */
- public function needsAlert(): bool
- {
- return in_array($this, [self::WARNING, self::ERROR, self::CRITICAL]);
- }
- /**
- * 检查是否需要立即处理
- *
- * @return bool
- */
- public function needsImmediateAction(): bool
- {
- return $this === self::CRITICAL;
- }
- /**
- * 获取所有日志级别的选项数组
- *
- * @return array
- */
- public static function getOptions(): array
- {
- $options = [];
- foreach (self::cases() as $case) {
- $options[$case->value] = $case->getLabel();
- }
- return $options;
- }
- /**
- * 按级别排序(从低到高)
- *
- * @return array
- */
- public static function getSortedByLevel(): array
- {
- $levels = self::cases();
- usort($levels, function ($a, $b) {
- return $a->getLevel() <=> $b->getLevel();
- });
- return $levels;
- }
- /**
- * 获取错误级别
- *
- * @return array
- */
- public static function getErrorLevels(): array
- {
- return array_filter(self::cases(), function ($case) {
- return $case->isError();
- });
- }
- /**
- * 获取需要告警的级别
- *
- * @return array
- */
- public static function getAlertLevels(): array
- {
- return array_filter(self::cases(), function ($case) {
- return $case->needsAlert();
- });
- }
- /**
- * 根据数值获取日志级别
- *
- * @param int $level
- * @return LOG_LEVEL|null
- */
- public static function fromLevel(int $level): ?LOG_LEVEL
- {
- foreach (self::cases() as $case) {
- if ($case->getLevel() === $level) {
- return $case;
- }
- }
- return null;
- }
- /**
- * 检查当前级别是否高于指定级别
- *
- * @param LOG_LEVEL $compareLevel
- * @return bool
- */
- public function isHigherThan(LOG_LEVEL $compareLevel): bool
- {
- return $this->getLevel() > $compareLevel->getLevel();
- }
- /**
- * 检查当前级别是否低于指定级别
- *
- * @param LOG_LEVEL $compareLevel
- * @return bool
- */
- public function isLowerThan(LOG_LEVEL $compareLevel): bool
- {
- return $this->getLevel() < $compareLevel->getLevel();
- }
- }
|