'调试', 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(); } }