github.com/saferwall/pe@v1.5.2/log/filter_test.go (about) 1 package log 2 3 import ( 4 "bytes" 5 "io" 6 "testing" 7 ) 8 9 func TestFilterAll(t *testing.T) { 10 logger := With(DefaultLogger, "ts", DefaultTimestamp, "caller", DefaultCaller) 11 log := NewHelper(NewFilter(logger, 12 FilterLevel(LevelDebug), 13 FilterKey("username"), 14 FilterValue("hello"), 15 FilterFunc(testFilterFunc), 16 )) 17 log.Log(LevelDebug, "msg", "test debug") 18 log.Info("hello") 19 log.Infow("password", "123456") 20 log.Infow("username", "kratos") 21 log.Warn("warn log") 22 } 23 24 func TestFilterLevel(t *testing.T) { 25 logger := With(DefaultLogger, "ts", DefaultTimestamp, "caller", DefaultCaller) 26 log := NewHelper(NewFilter(NewFilter(logger, FilterLevel(LevelWarn)))) 27 log.Log(LevelDebug, "msg1", "te1st debug") 28 log.Debug("test debug") 29 log.Debugf("test %s", "debug") 30 log.Debugw("log", "test debug") 31 log.Warn("warn log") 32 } 33 34 func TestFilterCaller(t *testing.T) { 35 logger := With(DefaultLogger, "ts", DefaultTimestamp, "caller", DefaultCaller) 36 log := NewFilter(logger) 37 _ = log.Log(LevelDebug, "msg1", "te1st debug") 38 logHelper := NewHelper(NewFilter(logger)) 39 logHelper.Log(LevelDebug, "msg1", "te1st debug") 40 } 41 42 func TestFilterKey(t *testing.T) { 43 logger := With(DefaultLogger, "ts", DefaultTimestamp, "caller", DefaultCaller) 44 log := NewHelper(NewFilter(logger, FilterKey("password"))) 45 log.Debugw("password", "123456") 46 } 47 48 func TestFilterValue(t *testing.T) { 49 logger := With(DefaultLogger, "ts", DefaultTimestamp, "caller", DefaultCaller) 50 log := NewHelper(NewFilter(logger, FilterValue("debug"))) 51 log.Debugf("test %s", "debug") 52 } 53 54 func TestFilterFunc(t *testing.T) { 55 logger := With(DefaultLogger, "ts", DefaultTimestamp, "caller", DefaultCaller) 56 log := NewHelper(NewFilter(logger, FilterFunc(testFilterFunc))) 57 log.Debug("debug level") 58 log.Infow("password", "123456") 59 } 60 61 func BenchmarkFilterKey(b *testing.B) { 62 log := NewHelper(NewFilter(NewStdLogger(io.Discard), FilterKey("password"))) 63 for i := 0; i < b.N; i++ { 64 log.Infow("password", "123456") 65 } 66 } 67 68 func BenchmarkFilterValue(b *testing.B) { 69 log := NewHelper(NewFilter(NewStdLogger(io.Discard), FilterValue("password"))) 70 for i := 0; i < b.N; i++ { 71 log.Infow("password") 72 } 73 } 74 75 func BenchmarkFilterFunc(b *testing.B) { 76 log := NewHelper(NewFilter(NewStdLogger(io.Discard), FilterFunc(testFilterFunc))) 77 for i := 0; i < b.N; i++ { 78 log.Info("password", "123456") 79 } 80 } 81 82 func testFilterFunc(level Level, keyvals ...interface{}) bool { 83 if level == LevelWarn { 84 return true 85 } 86 for i := 0; i < len(keyvals); i++ { 87 if keyvals[i] == "password" { 88 keyvals[i+1] = fuzzyStr 89 } 90 } 91 return false 92 } 93 94 func TestFilterFuncWitchLoggerPrefix(t *testing.T) { 95 buf := new(bytes.Buffer) 96 tests := []struct { 97 logger Logger 98 want string 99 }{ 100 { 101 logger: NewFilter(With(NewStdLogger(buf), "caller", "caller", "prefix", "whaterver"), FilterFunc(testFilterFuncWithLoggerPrefix)), 102 want: "", 103 }, 104 { 105 logger: NewFilter(With(NewStdLogger(buf), "caller", "caller"), FilterFunc(testFilterFuncWithLoggerPrefix)), 106 want: "INFO caller=caller msg=msg\n", 107 }, 108 } 109 110 for _, tt := range tests { 111 err := tt.logger.Log(LevelInfo, "msg", "msg") 112 if err != nil { 113 t.Fatal("err should be nil") 114 } 115 got := buf.String() 116 if got != tt.want { 117 t.Fatalf("filter should catch prefix, want %s, got %s.", tt.want, got) 118 } 119 buf.Reset() 120 } 121 } 122 123 func testFilterFuncWithLoggerPrefix(level Level, keyvals ...interface{}) bool { 124 if level == LevelWarn { 125 return true 126 } 127 for i := 0; i < len(keyvals); i += 2 { 128 if keyvals[i] == "prefix" { 129 return true 130 } 131 } 132 return false 133 }