package hiedalog const ( DLN_FATAL = "FATAL" DLN_PANIC = "PANIC" DLN_ERROR = "ERROR" DLN_WARN = "WARN" DLN_INFO = "INFO" DLN_VERBOSE = "VERBOSE" DLN_DEBUG = "DEBUG" ) type HiedaLogLevel struct { Name string LevelNumber uint8 } type HiedaLogLevelFilter struct { levelNameMap map[string]HiedaLogLevel defaultLevelID uint8 } func (f *HiedaLogLevelFilter) NameToID(name string) uint8 { v, ok := f.levelNameMap[name] if ok { return v.LevelNumber } else { return f.defaultLevelID } } func (f *HiedaLogLevelFilter) NameToLevel(name string) HiedaLogLevel { v, ok := f.levelNameMap[name] if ok { return v } else { return HiedaLogLevel{Name: name, LevelNumber: f.defaultLevelID} } } func (f *HiedaLogLevelFilter) CanEmit(name string, reflevel uint8) bool { id := f.NameToID(name) return id <= reflevel } func (f *HiedaLogLevelFilter) CanEmitEx(name string, reflevel uint8) (bool, HiedaLogLevel) { l := f.NameToLevel(name) return l.LevelNumber <= reflevel, l } func (f *HiedaLogLevelFilter) GetLevelList() []HiedaLogLevel { o := make([]HiedaLogLevel, 0, len(f.levelNameMap)) for _, v := range f.levelNameMap { o = append(o, v) } return o } func NewLevelFilter(levelList []HiedaLogLevel, defaultLevelID uint8) HiedaLogLevelFilter { m := make(map[string]HiedaLogLevel) for _, v := range levelList { m[v.Name] = v } return HiedaLogLevelFilter{ levelNameMap: m, defaultLevelID: defaultLevelID, } } func NewDefaultLevelFilter() HiedaLogLevelFilter { ld := []HiedaLogLevel{ {Name: "FATAL", LevelNumber: 0}, {Name: "PANIC", LevelNumber: 1}, {Name: "ERROR", LevelNumber: 2}, {Name: "WARN", LevelNumber: 3}, {Name: "INFO", LevelNumber: 4}, {Name: "VERBOSE", LevelNumber: 5}, {Name: "DEBUG", LevelNumber: 6}, {Name: "UNKNOWN", LevelNumber: 7}, } return NewLevelFilter(ld, 7) }