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  }