github.com/go-kit/log@v0.2.1/level/benchmark_test.go (about) 1 package level_test 2 3 import ( 4 "io/ioutil" 5 "testing" 6 7 "github.com/go-kit/log" 8 "github.com/go-kit/log/level" 9 ) 10 11 func Benchmark(b *testing.B) { 12 contexts := []struct { 13 name string 14 context func(log.Logger) log.Logger 15 }{ 16 {"NoContext", func(l log.Logger) log.Logger { 17 return l 18 }}, 19 {"TimeContext", func(l log.Logger) log.Logger { 20 return log.With(l, "time", log.DefaultTimestampUTC) 21 }}, 22 {"CallerContext", func(l log.Logger) log.Logger { 23 return log.With(l, "caller", log.DefaultCaller) 24 }}, 25 {"TimeCallerReqIDContext", func(l log.Logger) log.Logger { 26 return log.With(l, "time", log.DefaultTimestampUTC, "caller", log.DefaultCaller, "reqID", 29) 27 }}, 28 } 29 30 loggers := []struct { 31 name string 32 logger log.Logger 33 }{ 34 {"Nop", log.NewNopLogger()}, 35 {"Logfmt", log.NewLogfmtLogger(ioutil.Discard)}, 36 {"JSON", log.NewJSONLogger(ioutil.Discard)}, 37 } 38 39 filters := []struct { 40 name string 41 filter func(log.Logger) log.Logger 42 }{ 43 {"Baseline", func(l log.Logger) log.Logger { 44 return l 45 }}, 46 {"DisallowedLevel", func(l log.Logger) log.Logger { 47 return level.NewFilter(l, level.AllowInfo()) 48 }}, 49 {"AllowedLevel", func(l log.Logger) log.Logger { 50 return level.NewFilter(l, level.AllowAll()) 51 }}, 52 } 53 54 for _, c := range contexts { 55 b.Run(c.name, func(b *testing.B) { 56 for _, f := range filters { 57 b.Run(f.name, func(b *testing.B) { 58 for _, l := range loggers { 59 b.Run(l.name, func(b *testing.B) { 60 logger := c.context(f.filter(l.logger)) 61 b.ResetTimer() 62 b.ReportAllocs() 63 for i := 0; i < b.N; i++ { 64 level.Debug(logger).Log("foo", "bar") 65 } 66 }) 67 } 68 }) 69 } 70 }) 71 } 72 }