LOG_LEVEL.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace App\Module\ThirdParty\Enums;
  3. /**
  4. * 第三方服务日志级别枚举
  5. */
  6. enum LOG_LEVEL: string
  7. {
  8. case DEBUG = 'DEBUG'; // 调试级别
  9. case INFO = 'INFO'; // 信息级别
  10. case WARNING = 'WARNING'; // 警告级别
  11. case ERROR = 'ERROR'; // 错误级别
  12. case CRITICAL = 'CRITICAL'; // 严重错误级别
  13. /**
  14. * 获取日志级别的中文描述
  15. *
  16. * @return string
  17. */
  18. public function getLabel(): string
  19. {
  20. return match ($this) {
  21. self::DEBUG => '调试',
  22. self::INFO => '信息',
  23. self::WARNING => '警告',
  24. self::ERROR => '错误',
  25. self::CRITICAL => '严重错误',
  26. };
  27. }
  28. /**
  29. * 获取日志级别的详细描述
  30. *
  31. * @return string
  32. */
  33. public function getDescription(): string
  34. {
  35. return match ($this) {
  36. self::DEBUG => '调试信息,用于开发和调试阶段',
  37. self::INFO => '一般信息,记录正常的操作流程',
  38. self::WARNING => '警告信息,可能存在问题但不影响正常运行',
  39. self::ERROR => '错误信息,操作失败但系统可以继续运行',
  40. self::CRITICAL => '严重错误,系统可能无法正常运行',
  41. };
  42. }
  43. /**
  44. * 获取日志级别的颜色
  45. *
  46. * @return string
  47. */
  48. public function getColor(): string
  49. {
  50. return match ($this) {
  51. self::DEBUG => 'secondary',
  52. self::INFO => 'primary',
  53. self::WARNING => 'warning',
  54. self::ERROR => 'danger',
  55. self::CRITICAL => 'dark',
  56. };
  57. }
  58. /**
  59. * 获取日志级别的图标
  60. *
  61. * @return string
  62. */
  63. public function getIcon(): string
  64. {
  65. return match ($this) {
  66. self::DEBUG => 'fa-bug',
  67. self::INFO => 'fa-info-circle',
  68. self::WARNING => 'fa-exclamation-triangle',
  69. self::ERROR => 'fa-times-circle',
  70. self::CRITICAL => 'fa-skull-crossbones',
  71. };
  72. }
  73. /**
  74. * 获取日志级别的数值(数字越大级别越高)
  75. *
  76. * @return int
  77. */
  78. public function getLevel(): int
  79. {
  80. return match ($this) {
  81. self::DEBUG => 1,
  82. self::INFO => 2,
  83. self::WARNING => 3,
  84. self::ERROR => 4,
  85. self::CRITICAL => 5,
  86. };
  87. }
  88. /**
  89. * 检查是否为错误级别
  90. *
  91. * @return bool
  92. */
  93. public function isError(): bool
  94. {
  95. return in_array($this, [self::ERROR, self::CRITICAL]);
  96. }
  97. /**
  98. * 检查是否需要告警
  99. *
  100. * @return bool
  101. */
  102. public function needsAlert(): bool
  103. {
  104. return in_array($this, [self::WARNING, self::ERROR, self::CRITICAL]);
  105. }
  106. /**
  107. * 检查是否需要立即处理
  108. *
  109. * @return bool
  110. */
  111. public function needsImmediateAction(): bool
  112. {
  113. return $this === self::CRITICAL;
  114. }
  115. /**
  116. * 获取所有日志级别的选项数组
  117. *
  118. * @return array
  119. */
  120. public static function getOptions(): array
  121. {
  122. $options = [];
  123. foreach (self::cases() as $case) {
  124. $options[$case->value] = $case->getLabel();
  125. }
  126. return $options;
  127. }
  128. /**
  129. * 按级别排序(从低到高)
  130. *
  131. * @return array
  132. */
  133. public static function getSortedByLevel(): array
  134. {
  135. $levels = self::cases();
  136. usort($levels, function ($a, $b) {
  137. return $a->getLevel() <=> $b->getLevel();
  138. });
  139. return $levels;
  140. }
  141. /**
  142. * 获取错误级别
  143. *
  144. * @return array
  145. */
  146. public static function getErrorLevels(): array
  147. {
  148. return array_filter(self::cases(), function ($case) {
  149. return $case->isError();
  150. });
  151. }
  152. /**
  153. * 获取需要告警的级别
  154. *
  155. * @return array
  156. */
  157. public static function getAlertLevels(): array
  158. {
  159. return array_filter(self::cases(), function ($case) {
  160. return $case->needsAlert();
  161. });
  162. }
  163. /**
  164. * 根据数值获取日志级别
  165. *
  166. * @param int $level
  167. * @return LOG_LEVEL|null
  168. */
  169. public static function fromLevel(int $level): ?LOG_LEVEL
  170. {
  171. foreach (self::cases() as $case) {
  172. if ($case->getLevel() === $level) {
  173. return $case;
  174. }
  175. }
  176. return null;
  177. }
  178. /**
  179. * 检查当前级别是否高于指定级别
  180. *
  181. * @param LOG_LEVEL $compareLevel
  182. * @return bool
  183. */
  184. public function isHigherThan(LOG_LEVEL $compareLevel): bool
  185. {
  186. return $this->getLevel() > $compareLevel->getLevel();
  187. }
  188. /**
  189. * 检查当前级别是否低于指定级别
  190. *
  191. * @param LOG_LEVEL $compareLevel
  192. * @return bool
  193. */
  194. public function isLowerThan(LOG_LEVEL $compareLevel): bool
  195. {
  196. return $this->getLevel() < $compareLevel->getLevel();
  197. }
  198. }