level.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package hiedalog
  2. const (
  3. DLN_FATAL = "FATAL"
  4. DLN_PANIC = "PANIC"
  5. DLN_ERROR = "ERROR"
  6. DLN_WARN = "WARN"
  7. DLN_INFO = "INFO"
  8. DLN_VERBOSE = "VERBOSE"
  9. DLN_DEBUG = "DEBUG"
  10. )
  11. type HiedaLogLevel struct {
  12. Name string
  13. LevelNumber uint8
  14. }
  15. type HiedaLogLevelFilter struct {
  16. levelNameMap map[string]HiedaLogLevel
  17. defaultLevelID uint8
  18. }
  19. func (f *HiedaLogLevelFilter) NameToID(name string) uint8 {
  20. v, ok := f.levelNameMap[name]
  21. if ok {
  22. return v.LevelNumber
  23. } else {
  24. return f.defaultLevelID
  25. }
  26. }
  27. func (f *HiedaLogLevelFilter) NameToLevel(name string) HiedaLogLevel {
  28. v, ok := f.levelNameMap[name]
  29. if ok {
  30. return v
  31. } else {
  32. return HiedaLogLevel{Name: name, LevelNumber: f.defaultLevelID}
  33. }
  34. }
  35. func (f *HiedaLogLevelFilter) CanEmit(name string, reflevel uint8) bool {
  36. id := f.NameToID(name)
  37. return id <= reflevel
  38. }
  39. func (f *HiedaLogLevelFilter) CanEmitEx(name string, reflevel uint8) (bool, HiedaLogLevel) {
  40. l := f.NameToLevel(name)
  41. return l.LevelNumber <= reflevel, l
  42. }
  43. func (f *HiedaLogLevelFilter) GetLevelList() []HiedaLogLevel {
  44. o := make([]HiedaLogLevel, 0, len(f.levelNameMap))
  45. for _, v := range f.levelNameMap {
  46. o = append(o, v)
  47. }
  48. return o
  49. }
  50. func NewLevelFilter(levelList []HiedaLogLevel, defaultLevelID uint8) HiedaLogLevelFilter {
  51. m := make(map[string]HiedaLogLevel)
  52. for _, v := range levelList {
  53. m[v.Name] = v
  54. }
  55. return HiedaLogLevelFilter{
  56. levelNameMap: m,
  57. defaultLevelID: defaultLevelID,
  58. }
  59. }
  60. func NewDefaultLevelFilter() HiedaLogLevelFilter {
  61. ld := []HiedaLogLevel{
  62. {Name: "FATAL", LevelNumber: 0},
  63. {Name: "PANIC", LevelNumber: 1},
  64. {Name: "ERROR", LevelNumber: 2},
  65. {Name: "WARN", LevelNumber: 3},
  66. {Name: "INFO", LevelNumber: 4},
  67. {Name: "VERBOSE", LevelNumber: 5},
  68. {Name: "DEBUG", LevelNumber: 6},
  69. {Name: "UNKNOWN", LevelNumber: 7},
  70. }
  71. return NewLevelFilter(ld, 7)
  72. }