...

Source file src/github.com/go-kit/kit/log/zap/zap_sugar_logger_test.go

Documentation: github.com/go-kit/kit/log/zap

     1  package zap_test
     2  
     3  import (
     4  	"encoding/json"
     5  	kitzap "github.com/go-kit/kit/log/zap"
     6  	"go.uber.org/zap"
     7  	"go.uber.org/zap/zapcore"
     8  	"strings"
     9  	"testing"
    10  )
    11  
    12  func TestZapSugarLogger(t *testing.T) {
    13  	// logger config
    14  	encoderConfig := zap.NewDevelopmentEncoderConfig()
    15  	encoder := zapcore.NewJSONEncoder(encoderConfig)
    16  	levelKey := encoderConfig.LevelKey
    17  	// basic test cases
    18  	type testCase struct {
    19  		level zapcore.Level
    20  		kvs   []interface{}
    21  		want  map[string]string
    22  	}
    23  	testCases := []testCase{
    24  		{level: zapcore.DebugLevel, kvs: []interface{}{"key1", "value1"},
    25  			want: map[string]string{levelKey: "DEBUG", "key1": "value1"}},
    26  
    27  		{level: zapcore.InfoLevel, kvs: []interface{}{"key2", "value2"},
    28  			want: map[string]string{levelKey: "INFO", "key2": "value2"}},
    29  
    30  		{level: zapcore.WarnLevel, kvs: []interface{}{"key3", "value3"},
    31  			want: map[string]string{levelKey: "WARN", "key3": "value3"}},
    32  
    33  		{level: zapcore.ErrorLevel, kvs: []interface{}{"key4", "value4"},
    34  			want: map[string]string{levelKey: "ERROR", "key4": "value4"}},
    35  
    36  		{level: zapcore.DPanicLevel, kvs: []interface{}{"key5", "value5"},
    37  			want: map[string]string{levelKey: "DPANIC", "key5": "value5"}},
    38  
    39  		{level: zapcore.PanicLevel, kvs: []interface{}{"key6", "value6"},
    40  			want: map[string]string{levelKey: "PANIC", "key6": "value6"}},
    41  	}
    42  	// test
    43  	for _, testCase := range testCases {
    44  		t.Run(testCase.level.String(), func(t *testing.T) {
    45  			// make logger
    46  			writer := &tbWriter{tb: t}
    47  			logger := zap.New(
    48  				zapcore.NewCore(encoder, zapcore.AddSync(writer), zap.DebugLevel),
    49  				zap.Development())
    50  			// check panic
    51  			shouldPanic := testCase.level >= zapcore.DPanicLevel
    52  			kitLogger := kitzap.NewZapSugarLogger(logger, testCase.level)
    53  			defer func() {
    54  				isPanic := recover() != nil
    55  				if shouldPanic != isPanic {
    56  					t.Errorf("test level %v should panic(%v), but %v", testCase.level, shouldPanic, isPanic)
    57  				}
    58  				// check log kvs
    59  				logMap := make(map[string]string)
    60  				err := json.Unmarshal([]byte(writer.sb.String()), &logMap)
    61  				if err != nil {
    62  					t.Errorf("unmarshal error: %v", err)
    63  				} else {
    64  					for k, v := range testCase.want {
    65  						vv, ok := logMap[k]
    66  						if !ok || v != vv {
    67  							t.Error("error log")
    68  						}
    69  					}
    70  				}
    71  			}()
    72  			kitLogger.Log(testCase.kvs...)
    73  		})
    74  	}
    75  }
    76  
    77  type tbWriter struct {
    78  	tb testing.TB
    79  	sb strings.Builder
    80  }
    81  
    82  func (w *tbWriter) Write(b []byte) (n int, err error) {
    83  	w.tb.Logf(string(b))
    84  	w.sb.Write(b)
    85  	return len(b), nil
    86  }
    87  

View as plain text