logger_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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_test
  5. import (
  6. "fmt"
  7. "log"
  8. "strings"
  9. "testing"
  10. logi "github.com/influxdata/influxdb-client-go/v2/internal/log"
  11. dlog "github.com/influxdata/influxdb-client-go/v2/log"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func logMessages() {
  15. dlog.Log.Debug("Debug")
  16. dlog.Log.Debugf("Debugf %s %d", "message", 1)
  17. dlog.Log.Info("Info")
  18. dlog.Log.Infof("Infof %s %d", "message", 2)
  19. dlog.Log.Warn("Warn")
  20. dlog.Log.Warnf("Warnf %s %d", "message", 3)
  21. dlog.Log.Error("Error")
  22. dlog.Log.Errorf("Errorf %s %d", "message", 4)
  23. }
  24. func verifyLogs(t *testing.T, sb *strings.Builder, logLevel uint, prefix string) {
  25. if logLevel >= dlog.DebugLevel {
  26. assert.True(t, strings.Contains(sb.String(), prefix+" D! Debug"))
  27. assert.True(t, strings.Contains(sb.String(), prefix+" D! Debugf message 1"))
  28. } else {
  29. assert.False(t, strings.Contains(sb.String(), prefix+" D! Debug"))
  30. assert.False(t, strings.Contains(sb.String(), prefix+" D! Debugf message 1"))
  31. }
  32. if logLevel >= dlog.InfoLevel {
  33. assert.True(t, strings.Contains(sb.String(), prefix+" I! Info"))
  34. assert.True(t, strings.Contains(sb.String(), prefix+" I! Infof message 2"))
  35. } else {
  36. assert.False(t, strings.Contains(sb.String(), prefix+" I! Info"))
  37. assert.False(t, strings.Contains(sb.String(), prefix+" I! Infof message 2"))
  38. }
  39. if logLevel >= dlog.WarningLevel {
  40. assert.True(t, strings.Contains(sb.String(), prefix+" W! Warn"))
  41. assert.True(t, strings.Contains(sb.String(), prefix+" W! Warnf message 3"))
  42. } else {
  43. assert.False(t, strings.Contains(sb.String(), prefix+" W! Warn"))
  44. assert.False(t, strings.Contains(sb.String(), prefix+" W! Warnf message 3"))
  45. }
  46. if logLevel >= dlog.ErrorLevel {
  47. assert.True(t, strings.Contains(sb.String(), prefix+" E! Error"))
  48. assert.True(t, strings.Contains(sb.String(), prefix+" E! Errorf message 4"))
  49. }
  50. }
  51. func TestLogging(t *testing.T) {
  52. var sb strings.Builder
  53. log.SetOutput(&sb)
  54. log.SetFlags(0)
  55. //test default settings
  56. logMessages()
  57. verifyLogs(t, &sb, dlog.ErrorLevel, "influxdb2client")
  58. sb.Reset()
  59. dlog.Log.SetLogLevel(dlog.WarningLevel)
  60. logMessages()
  61. verifyLogs(t, &sb, dlog.WarningLevel, "influxdb2client")
  62. sb.Reset()
  63. dlog.Log.SetLogLevel(dlog.InfoLevel)
  64. logMessages()
  65. verifyLogs(t, &sb, dlog.InfoLevel, "influxdb2client")
  66. sb.Reset()
  67. dlog.Log.SetLogLevel(dlog.DebugLevel)
  68. logMessages()
  69. verifyLogs(t, &sb, dlog.DebugLevel, "influxdb2client")
  70. sb.Reset()
  71. dlog.Log.SetPrefix("client")
  72. logMessages()
  73. verifyLogs(t, &sb, dlog.DebugLevel, "client")
  74. }
  75. func TestCustomLogger(t *testing.T) {
  76. var sb strings.Builder
  77. log.SetOutput(&sb)
  78. log.SetFlags(0)
  79. dlog.Log = &testLogger{}
  80. //test default settings
  81. logMessages()
  82. verifyLogs(t, &sb, dlog.DebugLevel, "testlogger")
  83. }
  84. type testLogger struct {
  85. }
  86. func (l *testLogger) LogLevel() uint {
  87. return 0
  88. }
  89. func (l *testLogger) SetLogLevel(_ uint) {
  90. }
  91. func (l *testLogger) SetPrefix(_ string) {
  92. }
  93. func (l *testLogger) Debugf(format string, v ...interface{}) {
  94. log.Print("testlogger", " D! ", fmt.Sprintf(format, v...))
  95. }
  96. func (l *testLogger) Debug(msg string) {
  97. log.Print("testlogger", " D! ", msg)
  98. }
  99. func (l *testLogger) Infof(format string, v ...interface{}) {
  100. log.Print("testlogger", " I! ", fmt.Sprintf(format, v...))
  101. }
  102. func (l *testLogger) Info(msg string) {
  103. log.Print("testlogger", " I! ", msg)
  104. }
  105. func (l *testLogger) Warnf(format string, v ...interface{}) {
  106. log.Print("testlogger", " W! ", fmt.Sprintf(format, v...))
  107. }
  108. func (l *testLogger) Warn(msg string) {
  109. log.Print("testlogger", " W! ", msg)
  110. }
  111. func (l *testLogger) Errorf(format string, v ...interface{}) {
  112. log.Print("testlogger", " E! ", fmt.Sprintf(format, v...))
  113. }
  114. func (l *testLogger) Error(msg string) {
  115. log.Print("testlogger", " [E]! ", msg)
  116. }
  117. type nullWriter struct{}
  118. func (m *nullWriter) Write(p []byte) (n int, err error) {
  119. return len(p), nil
  120. }
  121. func BenchmarkLogger(b *testing.B) {
  122. // run the Fib function b.N times
  123. log.SetOutput(&nullWriter{})
  124. dlog.Log.SetLogLevel(dlog.DebugLevel)
  125. for n := 0; n < b.N; n++ {
  126. for i := 0; i < 5; i++ {
  127. go logi.Debug("Log nothing")
  128. }
  129. }
  130. }