level.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package log
  2. import (
  3. "encoding/json"
  4. "errors"
  5. )
  6. // LogLevelMapping is a mapping for LogLevel enum
  7. var LogLevelMapping = map[string]LogLevel{
  8. ERROR.String(): ERROR,
  9. WARNING.String(): WARNING,
  10. INFO.String(): INFO,
  11. DEBUG.String(): DEBUG,
  12. SILENT.String(): SILENT,
  13. }
  14. const (
  15. DEBUG LogLevel = iota
  16. INFO
  17. WARNING
  18. ERROR
  19. SILENT
  20. )
  21. type LogLevel int
  22. // UnmarshalYAML unserialize LogLevel with yaml
  23. func (l *LogLevel) UnmarshalYAML(unmarshal func(any) error) error {
  24. var tp string
  25. unmarshal(&tp)
  26. level, exist := LogLevelMapping[tp]
  27. if !exist {
  28. return errors.New("invalid mode")
  29. }
  30. *l = level
  31. return nil
  32. }
  33. // UnmarshalJSON unserialize LogLevel with json
  34. func (l *LogLevel) UnmarshalJSON(data []byte) error {
  35. var tp string
  36. json.Unmarshal(data, &tp)
  37. level, exist := LogLevelMapping[tp]
  38. if !exist {
  39. return errors.New("invalid mode")
  40. }
  41. *l = level
  42. return nil
  43. }
  44. // MarshalJSON serialize LogLevel with json
  45. func (l LogLevel) MarshalJSON() ([]byte, error) {
  46. return json.Marshal(l.String())
  47. }
  48. // MarshalYAML serialize LogLevel with yaml
  49. func (l LogLevel) MarshalYAML() (any, error) {
  50. return l.String(), nil
  51. }
  52. func (l LogLevel) String() string {
  53. switch l {
  54. case INFO:
  55. return "info"
  56. case WARNING:
  57. return "warning"
  58. case ERROR:
  59. return "error"
  60. case DEBUG:
  61. return "debug"
  62. case SILENT:
  63. return "silent"
  64. default:
  65. return "unknown"
  66. }
  67. }