logs_test.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package logc
  2. import (
  3. "bytes"
  4. "context"
  5. "encoding/json"
  6. "fmt"
  7. "runtime"
  8. "strings"
  9. "testing"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/zeromicro/go-zero/core/logx"
  12. )
  13. func TestAddGlobalFields(t *testing.T) {
  14. var buf bytes.Buffer
  15. writer := logx.NewWriter(&buf)
  16. old := logx.Reset()
  17. logx.SetWriter(writer)
  18. defer logx.SetWriter(old)
  19. Info(context.Background(), "hello")
  20. buf.Reset()
  21. AddGlobalFields(Field("a", "1"), Field("b", "2"))
  22. AddGlobalFields(Field("c", "3"))
  23. Info(context.Background(), "world")
  24. var m map[string]any
  25. assert.NoError(t, json.Unmarshal(buf.Bytes(), &m))
  26. assert.Equal(t, "1", m["a"])
  27. assert.Equal(t, "2", m["b"])
  28. assert.Equal(t, "3", m["c"])
  29. }
  30. func TestAlert(t *testing.T) {
  31. var buf strings.Builder
  32. writer := logx.NewWriter(&buf)
  33. old := logx.Reset()
  34. logx.SetWriter(writer)
  35. defer logx.SetWriter(old)
  36. Alert(context.Background(), "foo")
  37. assert.True(t, strings.Contains(buf.String(), "foo"), buf.String())
  38. }
  39. func TestError(t *testing.T) {
  40. var buf strings.Builder
  41. writer := logx.NewWriter(&buf)
  42. old := logx.Reset()
  43. logx.SetWriter(writer)
  44. defer logx.SetWriter(old)
  45. file, line := getFileLine()
  46. Error(context.Background(), "foo")
  47. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  48. }
  49. func TestErrorf(t *testing.T) {
  50. var buf strings.Builder
  51. writer := logx.NewWriter(&buf)
  52. old := logx.Reset()
  53. logx.SetWriter(writer)
  54. defer logx.SetWriter(old)
  55. file, line := getFileLine()
  56. Errorf(context.Background(), "foo %s", "bar")
  57. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  58. }
  59. func TestErrorv(t *testing.T) {
  60. var buf strings.Builder
  61. writer := logx.NewWriter(&buf)
  62. old := logx.Reset()
  63. logx.SetWriter(writer)
  64. defer logx.SetWriter(old)
  65. file, line := getFileLine()
  66. Errorv(context.Background(), "foo")
  67. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  68. }
  69. func TestErrorw(t *testing.T) {
  70. var buf strings.Builder
  71. writer := logx.NewWriter(&buf)
  72. old := logx.Reset()
  73. logx.SetWriter(writer)
  74. defer logx.SetWriter(old)
  75. file, line := getFileLine()
  76. Errorw(context.Background(), "foo", Field("a", "b"))
  77. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  78. }
  79. func TestInfo(t *testing.T) {
  80. var buf strings.Builder
  81. writer := logx.NewWriter(&buf)
  82. old := logx.Reset()
  83. logx.SetWriter(writer)
  84. defer logx.SetWriter(old)
  85. file, line := getFileLine()
  86. Info(context.Background(), "foo")
  87. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  88. }
  89. func TestInfof(t *testing.T) {
  90. var buf strings.Builder
  91. writer := logx.NewWriter(&buf)
  92. old := logx.Reset()
  93. logx.SetWriter(writer)
  94. defer logx.SetWriter(old)
  95. file, line := getFileLine()
  96. Infof(context.Background(), "foo %s", "bar")
  97. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  98. }
  99. func TestInfov(t *testing.T) {
  100. var buf strings.Builder
  101. writer := logx.NewWriter(&buf)
  102. old := logx.Reset()
  103. logx.SetWriter(writer)
  104. defer logx.SetWriter(old)
  105. file, line := getFileLine()
  106. Infov(context.Background(), "foo")
  107. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  108. }
  109. func TestInfow(t *testing.T) {
  110. var buf strings.Builder
  111. writer := logx.NewWriter(&buf)
  112. old := logx.Reset()
  113. logx.SetWriter(writer)
  114. defer logx.SetWriter(old)
  115. file, line := getFileLine()
  116. Infow(context.Background(), "foo", Field("a", "b"))
  117. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  118. }
  119. func TestDebug(t *testing.T) {
  120. var buf strings.Builder
  121. writer := logx.NewWriter(&buf)
  122. old := logx.Reset()
  123. logx.SetWriter(writer)
  124. defer logx.SetWriter(old)
  125. file, line := getFileLine()
  126. Debug(context.Background(), "foo")
  127. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  128. }
  129. func TestDebugf(t *testing.T) {
  130. var buf strings.Builder
  131. writer := logx.NewWriter(&buf)
  132. old := logx.Reset()
  133. logx.SetWriter(writer)
  134. defer logx.SetWriter(old)
  135. file, line := getFileLine()
  136. Debugf(context.Background(), "foo %s", "bar")
  137. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  138. }
  139. func TestDebugv(t *testing.T) {
  140. var buf strings.Builder
  141. writer := logx.NewWriter(&buf)
  142. old := logx.Reset()
  143. logx.SetWriter(writer)
  144. defer logx.SetWriter(old)
  145. file, line := getFileLine()
  146. Debugv(context.Background(), "foo")
  147. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  148. }
  149. func TestDebugw(t *testing.T) {
  150. var buf strings.Builder
  151. writer := logx.NewWriter(&buf)
  152. old := logx.Reset()
  153. logx.SetWriter(writer)
  154. defer logx.SetWriter(old)
  155. file, line := getFileLine()
  156. Debugw(context.Background(), "foo", Field("a", "b"))
  157. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)))
  158. }
  159. func TestMust(t *testing.T) {
  160. assert.NotPanics(t, func() {
  161. Must(nil)
  162. })
  163. assert.NotPanics(t, func() {
  164. MustSetup(LogConf{})
  165. })
  166. }
  167. func TestMisc(t *testing.T) {
  168. SetLevel(logx.DebugLevel)
  169. assert.NoError(t, SetUp(LogConf{}))
  170. assert.NoError(t, Close())
  171. }
  172. func TestSlow(t *testing.T) {
  173. var buf strings.Builder
  174. writer := logx.NewWriter(&buf)
  175. old := logx.Reset()
  176. logx.SetWriter(writer)
  177. defer logx.SetWriter(old)
  178. file, line := getFileLine()
  179. Slow(context.Background(), "foo")
  180. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)), buf.String())
  181. }
  182. func TestSlowf(t *testing.T) {
  183. var buf strings.Builder
  184. writer := logx.NewWriter(&buf)
  185. old := logx.Reset()
  186. logx.SetWriter(writer)
  187. defer logx.SetWriter(old)
  188. file, line := getFileLine()
  189. Slowf(context.Background(), "foo %s", "bar")
  190. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)), buf.String())
  191. }
  192. func TestSlowv(t *testing.T) {
  193. var buf strings.Builder
  194. writer := logx.NewWriter(&buf)
  195. old := logx.Reset()
  196. logx.SetWriter(writer)
  197. defer logx.SetWriter(old)
  198. file, line := getFileLine()
  199. Slowv(context.Background(), "foo")
  200. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)), buf.String())
  201. }
  202. func TestSloww(t *testing.T) {
  203. var buf strings.Builder
  204. writer := logx.NewWriter(&buf)
  205. old := logx.Reset()
  206. logx.SetWriter(writer)
  207. defer logx.SetWriter(old)
  208. file, line := getFileLine()
  209. Sloww(context.Background(), "foo", Field("a", "b"))
  210. assert.True(t, strings.Contains(buf.String(), fmt.Sprintf("%s:%d", file, line+1)), buf.String())
  211. }
  212. func getFileLine() (string, int) {
  213. _, file, line, _ := runtime.Caller(1)
  214. short := file
  215. for i := len(file) - 1; i > 0; i-- {
  216. if file[i] == '/' {
  217. short = file[i+1:]
  218. break
  219. }
  220. }
  221. return short, line
  222. }