level.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package logger
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. type Level int8
  7. const (
  8. // TraceLevel level. Designates finer-grained informational events than the Debug.
  9. TraceLevel Level = iota - 2
  10. // DebugLevel level. Usually only enabled when debugging. Very verbose logging.
  11. DebugLevel
  12. // InfoLevel is the default logging priority.
  13. // General operational entries about what's going on inside the application.
  14. InfoLevel
  15. // WarnLevel level. Non-critical entries that deserve eyes.
  16. WarnLevel
  17. // ErrorLevel level. Logs. Used for errors that should definitely be noted.
  18. ErrorLevel
  19. // FatalLevel level. Logs and then calls `logger.Exit(1)`. highest level of severity.
  20. FatalLevel
  21. )
  22. func (l Level) String() string {
  23. switch l {
  24. case TraceLevel:
  25. return "trace"
  26. case DebugLevel:
  27. return "debug"
  28. case InfoLevel:
  29. return "info"
  30. case WarnLevel:
  31. return "warn"
  32. case ErrorLevel:
  33. return "error"
  34. case FatalLevel:
  35. return "fatal"
  36. }
  37. return ""
  38. }
  39. // Enabled returns true if the given level is at or above this level.
  40. func (l Level) Enabled(lvl Level) bool {
  41. return lvl >= l
  42. }
  43. // GetLevel converts a level string into a logger Level value.
  44. // returns an error if the input string does not match known values.
  45. func GetLevel(levelStr string) (Level, error) {
  46. switch levelStr {
  47. case TraceLevel.String():
  48. return TraceLevel, nil
  49. case DebugLevel.String():
  50. return DebugLevel, nil
  51. case InfoLevel.String():
  52. return InfoLevel, nil
  53. case WarnLevel.String():
  54. return WarnLevel, nil
  55. case ErrorLevel.String():
  56. return ErrorLevel, nil
  57. case FatalLevel.String():
  58. return FatalLevel, nil
  59. }
  60. return InfoLevel, fmt.Errorf("Unknown Level String: '%s', defaulting to InfoLevel", levelStr)
  61. }
  62. func Info(args ...interface{}) {
  63. DefaultLogger.Log(InfoLevel, args...)
  64. }
  65. func Infof(template string, args ...interface{}) {
  66. DefaultLogger.Logf(InfoLevel, template, args...)
  67. }
  68. func Trace(args ...interface{}) {
  69. DefaultLogger.Log(TraceLevel, args...)
  70. }
  71. func Tracef(template string, args ...interface{}) {
  72. DefaultLogger.Logf(TraceLevel, template, args...)
  73. }
  74. func Debug(args ...interface{}) {
  75. DefaultLogger.Log(DebugLevel, args...)
  76. }
  77. func Debugf(template string, args ...interface{}) {
  78. DefaultLogger.Logf(DebugLevel, template, args...)
  79. }
  80. func Warn(args ...interface{}) {
  81. DefaultLogger.Log(WarnLevel, args...)
  82. }
  83. func Warnf(template string, args ...interface{}) {
  84. DefaultLogger.Logf(WarnLevel, template, args...)
  85. }
  86. func Error(args ...interface{}) {
  87. DefaultLogger.Log(ErrorLevel, args...)
  88. }
  89. func Errorf(template string, args ...interface{}) {
  90. DefaultLogger.Logf(ErrorLevel, template, args...)
  91. }
  92. func Fatal(args ...interface{}) {
  93. DefaultLogger.Log(FatalLevel, args...)
  94. os.Exit(1)
  95. }
  96. func Fatalf(template string, args ...interface{}) {
  97. DefaultLogger.Logf(FatalLevel, template, args...)
  98. os.Exit(1)
  99. }
  100. // Returns true if the given level is at or lower the current logger level
  101. func V(lvl Level, log Logger) bool {
  102. l := DefaultLogger
  103. if log != nil {
  104. l = log
  105. }
  106. return l.Options().Level <= lvl
  107. }