12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package logger
- import (
- "bytes"
- "log"
- "testing"
- "go.uber.org/zap"
- "go.uber.org/zap/buffer"
- "go.uber.org/zap/zapcore"
- )
- func TestLogVsLogLn(t *testing.T) {
- defer func() { logger = nil }()
- var buf bytes.Buffer
- testLogEqual := func(want string) {
- s := buf.String()
- if s != want {
- t.Errorf("got %s, want %s", s, want)
- }
- buf.Reset()
- }
- core := zapcore.NewCore(
- onlyMessage{},
- zapcore.AddSync(&buf),
- zapcore.DebugLevel,
- )
- l := zap.New(core)
- logger = l.Sugar()
- // logger.[Level] 系列的函数,因为受到底层 fmt.Sprint 的影响
- // 在处理 string 时不会添加默认的空格
- logger.Info(1, "2", 3)
- testLogEqual("123")
- // 而 logger.[Level]ln 系列的函数,因为底层使用的是 fmt.Sprintln
- // 所以会正常输出空格
- logger.Infoln(1, "2", 3)
- testLogEqual("1 2 3")
- stdLog := log.New(&buf, "", 0)
- // 标准库的 log 包的行为同样如此
- // 末尾的换行符是 log 包自动添加的
- stdLog.Print(1, "2", 3)
- testLogEqual("123\n")
- stdLog.Println(1, "2", 3)
- testLogEqual("1 2 3\n")
- }
- // 调试用,只重写了 EncodeEntry 方法。
- // 调用其他方法就 panic
- type onlyMessage struct{ zapcore.Encoder }
- var pool = buffer.NewPool()
- func (onlyMessage) EncodeEntry(e zapcore.Entry, _ []zapcore.Field) (*buffer.Buffer, error) {
- b := pool.Get()
- b.AppendString(e.Message)
- return b, nil
- }
|