OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / go-kit / kit / log / level / benchmark_test.go
1 package level_test
2
3 import (
4         "io/ioutil"
5         "testing"
6
7         "github.com/go-kit/kit/log"
8         "github.com/go-kit/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 }