7 "github.com/go-kit/kit/log"
8 "github.com/go-kit/kit/log/level"
11 func Benchmark(b *testing.B) {
12 contexts := []struct {
14 context func(log.Logger) log.Logger
16 {"NoContext", func(l log.Logger) log.Logger {
19 {"TimeContext", func(l log.Logger) log.Logger {
20 return log.With(l, "time", log.DefaultTimestampUTC)
22 {"CallerContext", func(l log.Logger) log.Logger {
23 return log.With(l, "caller", log.DefaultCaller)
25 {"TimeCallerReqIDContext", func(l log.Logger) log.Logger {
26 return log.With(l, "time", log.DefaultTimestampUTC, "caller", log.DefaultCaller, "reqID", 29)
34 {"Nop", log.NewNopLogger()},
35 {"Logfmt", log.NewLogfmtLogger(ioutil.Discard)},
36 {"JSON", log.NewJSONLogger(ioutil.Discard)},
41 filter func(log.Logger) log.Logger
43 {"Baseline", func(l log.Logger) log.Logger {
46 {"DisallowedLevel", func(l log.Logger) log.Logger {
47 return level.NewFilter(l, level.AllowInfo())
49 {"AllowedLevel", func(l log.Logger) log.Logger {
50 return level.NewFilter(l, level.AllowAll())
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))
63 for i := 0; i < b.N; i++ {
64 level.Debug(logger).Log("foo", "bar")