level.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package logger
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. type Level int8
  7. const (
  8. // TraceLevel 指定比“调试”更细粒度的信息性事件。
  9. TraceLevel Level = iota - 2
  10. // DebugLevel 通常仅在调试时启用。非常详细的日志记录。
  11. DebugLevel
  12. // InfoLevel 默认的日志记录优先级
  13. // 应用程序内部发生的事情的一般操作记录。
  14. InfoLevel
  15. // WarnLevel 值得关注的非关键记录.
  16. WarnLevel
  17. // ErrorLevel 明确应注意的错误。
  18. ErrorLevel
  19. // FatalLevel 记录,然后调用 `logger.Exit(1)`。 最高级别的严重性。
  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. // LevelForGorm 转换成gorm日志级别
  40. func (l Level) LevelForGorm() int {
  41. switch l {
  42. case FatalLevel, ErrorLevel:
  43. return 2
  44. case WarnLevel:
  45. return 3
  46. case InfoLevel, DebugLevel, TraceLevel:
  47. return 4
  48. default:
  49. return 1
  50. }
  51. }
  52. // Enabled returns true if the given level is at or above this level.
  53. func (l Level) Enabled(lvl Level) bool {
  54. return lvl >= l
  55. }
  56. // GetLevel 将级别字符串转换为记录器级别值。
  57. // 如果输入字符串与已知值不匹配,则返回错误。
  58. func GetLevel(levelStr string) (Level, error) {
  59. switch levelStr {
  60. case TraceLevel.String():
  61. return TraceLevel, nil
  62. case DebugLevel.String():
  63. return DebugLevel, nil
  64. case InfoLevel.String():
  65. return InfoLevel, nil
  66. case WarnLevel.String():
  67. return WarnLevel, nil
  68. case ErrorLevel.String():
  69. return ErrorLevel, nil
  70. case FatalLevel.String():
  71. return FatalLevel, nil
  72. }
  73. return InfoLevel, fmt.Errorf("Unknown Level String: '%s', defaulting to InfoLevel", levelStr)
  74. }
  75. func Info(args ...interface{}) {
  76. if len(args) > 1 {
  77. Infof(args[0].(string), args[1:])
  78. } else {
  79. DefaultLogger.Log(InfoLevel, args...)
  80. }
  81. }
  82. func Infof(template string, args ...interface{}) {
  83. DefaultLogger.Logf(InfoLevel, template, args...)
  84. }
  85. func Trace(args ...interface{}) {
  86. if len(args) > 1 {
  87. Infof(args[0].(string), args[1:])
  88. } else {
  89. DefaultLogger.Log(TraceLevel, args...)
  90. }
  91. }
  92. func Tracef(template string, args ...interface{}) {
  93. DefaultLogger.Logf(TraceLevel, template, args...)
  94. }
  95. func Debug(args ...interface{}) {
  96. DefaultLogger.Log(DebugLevel, args...)
  97. }
  98. func Debugf(template string, args ...interface{}) {
  99. DefaultLogger.Logf(DebugLevel, template, args...)
  100. }
  101. func Warn(args ...interface{}) {
  102. if len(args) > 1 {
  103. Debugf(args[0].(string), args[1:])
  104. } else {
  105. DefaultLogger.Log(WarnLevel, args...)
  106. }
  107. }
  108. func Warnf(template string, args ...interface{}) {
  109. DefaultLogger.Logf(WarnLevel, template, args...)
  110. }
  111. func Error(args ...interface{}) {
  112. if len(args) > 1 {
  113. Debugf(args[0].(string), args[1:])
  114. } else {
  115. DefaultLogger.Log(ErrorLevel, args...)
  116. }
  117. }
  118. func Errorf(template string, args ...interface{}) {
  119. DefaultLogger.Logf(ErrorLevel, template, args...)
  120. }
  121. func Fatal(args ...interface{}) {
  122. if len(args) > 1 {
  123. Debugf(args[0].(string), args[1:])
  124. } else {
  125. DefaultLogger.Log(FatalLevel, args...)
  126. }
  127. os.Exit(1)
  128. }
  129. func Fatalf(template string, args ...interface{}) {
  130. DefaultLogger.Logf(FatalLevel, template, args...)
  131. os.Exit(1)
  132. }
  133. // V 如果给定级别等于或低于当前记录器级别,则返回true
  134. func V(lvl Level, log Logger) bool {
  135. l := DefaultLogger
  136. if log != nil {
  137. l = log
  138. }
  139. return l.Options().Level <= lvl
  140. }