log.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package log
  2. import (
  3. "log"
  4. "sync"
  5. )
  6. var (
  7. level = InfoLevel
  8. format = TextFormat
  9. overrides = make(map[string]*levelOverride)
  10. mu = &sync.Mutex{}
  11. )
  12. // Fatal prints the given message, and exits the program
  13. func Fatal(message string, v ...any) {
  14. newEvent().Fatal(message, v...)
  15. }
  16. // Error prints the given message, if the current log level is ERROR or lower
  17. func Error(message string, v ...any) {
  18. newEvent().Error(message, v...)
  19. }
  20. // Warn prints the given message, if the current log level is WARN or lower
  21. func Warn(message string, v ...any) {
  22. newEvent().Warn(message, v...)
  23. }
  24. // Info prints the given message, if the current log level is INFO or lower
  25. func Info(message string, v ...any) {
  26. newEvent().Info(message, v...)
  27. }
  28. // Debug prints the given message, if the current log level is DEBUG or lower
  29. func Debug(message string, v ...any) {
  30. newEvent().Debug(message, v...)
  31. }
  32. // Trace prints the given message, if the current log level is TRACE
  33. func Trace(message string, v ...any) {
  34. newEvent().Trace(message, v...)
  35. }
  36. func Context(contexts ...Ctx) *Event {
  37. return newEvent().Context(contexts...)
  38. }
  39. func Field(key string, value any) *Event {
  40. return newEvent().Field(key, value)
  41. }
  42. func Fields(fields map[string]any) *Event {
  43. return newEvent().Fields(fields)
  44. }
  45. func Tag(tag string) *Event {
  46. return newEvent().Tag(tag)
  47. }
  48. // CurrentLevel returns the current log level
  49. func CurrentLevel() Level {
  50. mu.Lock()
  51. defer mu.Unlock()
  52. return level
  53. }
  54. // SetLevel sets a new log level
  55. func SetLevel(newLevel Level) {
  56. mu.Lock()
  57. defer mu.Unlock()
  58. level = newLevel
  59. }
  60. // SetLevelOverride adds a log override for the given field
  61. func SetLevelOverride(field string, value any, level Level) {
  62. mu.Lock()
  63. defer mu.Unlock()
  64. overrides[field] = &levelOverride{value: value, level: level}
  65. }
  66. // ResetLevelOverride removes all log level overrides
  67. func ResetLevelOverride() {
  68. mu.Lock()
  69. defer mu.Unlock()
  70. overrides = make(map[string]*levelOverride)
  71. }
  72. // CurrentFormat returns the current log formt
  73. func CurrentFormat() Format {
  74. mu.Lock()
  75. defer mu.Unlock()
  76. return format
  77. }
  78. // SetFormat sets a new log format
  79. func SetFormat(newFormat Format) {
  80. mu.Lock()
  81. defer mu.Unlock()
  82. format = newFormat
  83. if newFormat == JSONFormat {
  84. DisableDates()
  85. }
  86. }
  87. // DisableDates disables the date/time prefix
  88. func DisableDates() {
  89. log.SetFlags(0)
  90. }
  91. // Loggable returns true if the given log level is lower or equal to the current log level
  92. func Loggable(l Level) bool {
  93. return CurrentLevel() <= l
  94. }
  95. // IsTrace returns true if the current log level is TraceLevel
  96. func IsTrace() bool {
  97. return Loggable(TraceLevel)
  98. }
  99. // IsDebug returns true if the current log level is DebugLevel or below
  100. func IsDebug() bool {
  101. return Loggable(DebugLevel)
  102. }