level.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package log
  2. import (
  3. "encoding"
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. )
  8. type Level struct {
  9. rank int
  10. }
  11. var (
  12. Never = Level{-1} // A message at this level should never be logged.
  13. NotSet = Level{0}
  14. Debug = Level{1}
  15. Info = Level{2}
  16. Warning = Level{3}
  17. Error = Level{4}
  18. Critical = Level{5}
  19. disabled = Level{6} // It shouldn't be possible to define a message at this level.
  20. )
  21. func (l Level) isNotSet() bool {
  22. return l.rank == 0
  23. }
  24. func (l Level) LogString() string {
  25. switch l.rank {
  26. case NotSet.rank:
  27. return "NIL"
  28. case Debug.rank:
  29. return "DBG"
  30. case Info.rank:
  31. return "INF"
  32. case Warning.rank:
  33. return "WRN"
  34. case Error.rank:
  35. return "ERR"
  36. case Critical.rank:
  37. return "CRT"
  38. default:
  39. return strconv.FormatInt(int64(l.rank), 10)
  40. }
  41. }
  42. func (l Level) LessThan(r Level) bool {
  43. if l.rank == NotSet.rank {
  44. return false
  45. }
  46. return l.rank < r.rank
  47. }
  48. var _ encoding.TextUnmarshaler = (*Level)(nil)
  49. func (l *Level) UnmarshalText(text []byte) error {
  50. switch strings.ToLower(string(text)) {
  51. case "nil", "notset", "unset", "all", "*":
  52. *l = NotSet
  53. case "dbg", "debug":
  54. *l = Debug
  55. case "inf", "info":
  56. *l = Info
  57. case "wrn", "warning", "warn":
  58. *l = Warning
  59. case "err", "error":
  60. *l = Error
  61. case "crt", "critical", "crit":
  62. *l = Critical
  63. default:
  64. return fmt.Errorf("unknown log level: %q", text)
  65. }
  66. return nil
  67. }