logger.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // Copyright 2020-2021 InfluxData, Inc. All rights reserved.
  2. // Use of this source code is governed by MIT
  3. // license that can be found in the LICENSE file.
  4. // Package log defines Logging API.
  5. // The global Log variable contains the actual logger. Set it to own implementation to override logging. Set it to nil to disable logging
  6. package log
  7. import (
  8. "fmt"
  9. "log"
  10. "sync"
  11. )
  12. // Log is the library wide logger. Setting to nil disables logging.
  13. var Log Logger = &logger{logLevel: ErrorLevel, prefix: "influxdb2client"}
  14. // Log levels
  15. const (
  16. ErrorLevel uint = iota
  17. WarningLevel
  18. InfoLevel
  19. DebugLevel
  20. )
  21. // Logger defines interface for logging
  22. type Logger interface {
  23. // Writes formatted debug message if debug logLevel is enabled.
  24. Debugf(format string, v ...interface{})
  25. // Writes debug message if debug is enabled.
  26. Debug(msg string)
  27. // Writes formatted info message if info logLevel is enabled.
  28. Infof(format string, v ...interface{})
  29. // Writes info message if info logLevel is enabled
  30. Info(msg string)
  31. // Writes formatted warning message if warning logLevel is enabled.
  32. Warnf(format string, v ...interface{})
  33. // Writes warning message if warning logLevel is enabled.
  34. Warn(msg string)
  35. // Writes formatted error message
  36. Errorf(format string, v ...interface{})
  37. // Writes error message
  38. Error(msg string)
  39. // SetLogLevel sets allowed logging level.
  40. SetLogLevel(logLevel uint)
  41. // LogLevel retrieves current logging level
  42. LogLevel() uint
  43. // SetPrefix sets logging prefix.
  44. SetPrefix(prefix string)
  45. }
  46. // logger provides default implementation for Logger. It logs using Go log API
  47. // mutex is needed in cases when multiple clients run concurrently
  48. type logger struct {
  49. prefix string
  50. logLevel uint
  51. lock sync.Mutex
  52. }
  53. func (l *logger) SetLogLevel(logLevel uint) {
  54. l.lock.Lock()
  55. defer l.lock.Unlock()
  56. l.logLevel = logLevel
  57. }
  58. func (l *logger) LogLevel() uint {
  59. l.lock.Lock()
  60. defer l.lock.Unlock()
  61. return l.logLevel
  62. }
  63. func (l *logger) SetPrefix(prefix string) {
  64. l.lock.Lock()
  65. defer l.lock.Unlock()
  66. l.prefix = prefix
  67. }
  68. func (l *logger) Debugf(format string, v ...interface{}) {
  69. l.lock.Lock()
  70. defer l.lock.Unlock()
  71. if l.logLevel >= DebugLevel {
  72. log.Print(l.prefix, " D! ", fmt.Sprintf(format, v...))
  73. }
  74. }
  75. func (l *logger) Debug(msg string) {
  76. l.lock.Lock()
  77. defer l.lock.Unlock()
  78. if l.logLevel >= DebugLevel {
  79. log.Print(l.prefix, " D! ", msg)
  80. }
  81. }
  82. func (l *logger) Infof(format string, v ...interface{}) {
  83. l.lock.Lock()
  84. defer l.lock.Unlock()
  85. if l.logLevel >= InfoLevel {
  86. log.Print(l.prefix, " I! ", fmt.Sprintf(format, v...))
  87. }
  88. }
  89. func (l *logger) Info(msg string) {
  90. l.lock.Lock()
  91. defer l.lock.Unlock()
  92. if l.logLevel >= DebugLevel {
  93. log.Print(l.prefix, " I! ", msg)
  94. }
  95. }
  96. func (l *logger) Warnf(format string, v ...interface{}) {
  97. l.lock.Lock()
  98. defer l.lock.Unlock()
  99. if l.logLevel >= WarningLevel {
  100. log.Print(l.prefix, " W! ", fmt.Sprintf(format, v...))
  101. }
  102. }
  103. func (l *logger) Warn(msg string) {
  104. l.lock.Lock()
  105. defer l.lock.Unlock()
  106. if l.logLevel >= WarningLevel {
  107. log.Print(l.prefix, " W! ", msg)
  108. }
  109. }
  110. func (l *logger) Errorf(format string, v ...interface{}) {
  111. l.lock.Lock()
  112. defer l.lock.Unlock()
  113. log.Print(l.prefix, " E! ", fmt.Sprintf(format, v...))
  114. }
  115. func (l *logger) Error(msg string) {
  116. l.lock.Lock()
  117. defer l.lock.Unlock()
  118. log.Print(l.prefix, " E! ", msg)
  119. }