重构部分枚举, 让models包不依赖其他项目中的包
This commit is contained in:
@@ -6,6 +6,8 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
// GetAllModels 返回一个包含所有数据库模型实例的切片。
|
||||
@@ -129,3 +131,68 @@ func (a *UintArray) Scan(src interface{}) error {
|
||||
*a = arr
|
||||
return nil
|
||||
}
|
||||
|
||||
// SeverityLevel 定义了系统中告警、通知、日志的统一级别枚举。
|
||||
// 它以中文形式存储在数据库中,提高了可读性。
|
||||
type SeverityLevel string
|
||||
|
||||
const (
|
||||
// DebugLevel 调试级别,用于开发和诊断问题。
|
||||
DebugLevel SeverityLevel = "Debug"
|
||||
// InfoLevel 信息级别,用于记录常规操作。
|
||||
InfoLevel SeverityLevel = "Info"
|
||||
// WarnLevel 警告级别,表示出现潜在问题,需要关注。
|
||||
WarnLevel SeverityLevel = "Warn"
|
||||
// ErrorLevel 错误级别,表示发生了需要处理的错误。
|
||||
ErrorLevel SeverityLevel = "Error"
|
||||
// DPanicLevel 开发时崩溃级别,在开发模式下会触发 panic。
|
||||
DPanicLevel SeverityLevel = "DPanic"
|
||||
// PanicLevel 崩溃级别,记录日志后会立即触发 panic。
|
||||
PanicLevel SeverityLevel = "Panic"
|
||||
// FatalLevel 致命级别,记录日志后会调用 os.Exit(1) 退出程序。
|
||||
FatalLevel SeverityLevel = "Fatal"
|
||||
)
|
||||
|
||||
// ToZapLevel 将我们的自定义级别转换为 zapcore.Level,以便与日志记录器兼容。
|
||||
func (al SeverityLevel) ToZapLevel() zapcore.Level {
|
||||
switch al {
|
||||
case DebugLevel:
|
||||
return zapcore.DebugLevel
|
||||
case InfoLevel:
|
||||
return zapcore.InfoLevel
|
||||
case WarnLevel:
|
||||
return zapcore.WarnLevel
|
||||
case ErrorLevel:
|
||||
return zapcore.ErrorLevel
|
||||
case DPanicLevel:
|
||||
return zapcore.DPanicLevel
|
||||
case PanicLevel:
|
||||
return zapcore.PanicLevel
|
||||
case FatalLevel:
|
||||
return zapcore.FatalLevel
|
||||
default:
|
||||
// 默认情况下返回 Info 级别,保证程序健壮性
|
||||
return zapcore.InfoLevel
|
||||
}
|
||||
}
|
||||
|
||||
// Scan 实现了 sql.Scanner 接口,GORM 在从数据库读取数据时会调用此方法。
|
||||
func (al *SeverityLevel) Scan(value interface{}) error {
|
||||
bytes, ok := value.([]byte)
|
||||
if !ok {
|
||||
// 尝试处理其他可能的类型,例如字符串
|
||||
s, ok := value.(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("无法将值 %v (类型 %T) 扫描为 SeverityLevel", value, value)
|
||||
}
|
||||
*al = SeverityLevel(s)
|
||||
return nil
|
||||
}
|
||||
*al = SeverityLevel(bytes)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Value 实现了 driver.Valuer 接口,GORM 在将数据写入数据库时会调用此方法。
|
||||
func (al SeverityLevel) Value() (driver.Value, error) {
|
||||
return string(al), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user