-
Notifications
You must be signed in to change notification settings - Fork 3
/
loggers_benchmark_logfmt_test.go
135 lines (121 loc) · 4.22 KB
/
loggers_benchmark_logfmt_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package kiwi_test
// It was adapted from logxi package tests.
import (
"bytes"
"encoding/json"
"os"
"testing"
"time"
"github.com/grafov/kiwi"
"github.com/grafov/kiwi/level"
"github.com/grafov/kiwi/strict"
"github.com/grafov/kiwi/timestamp"
)
type M map[string]interface{}
var testObject = M{
"foo": "bar",
"bah": M{
"int": 1,
"float": -100.23,
"date": "06-01-01T15:04:05-0700",
"bool": true,
"nullable": nil,
},
}
// Right way for kiwi is realize Record interface for the custom type
// that logger can't accept directly. But you can simply pass fmt.Stringer
// interface as well.
// You need Record interface if you want specify quotation rules with IsQuoted().
// Elsewere String() is enough.
func (m M) String() string {
b, _ := json.Marshal(m)
return string(b)
}
var pid = os.Getpid()
func toJSON(m map[string]interface{}) string {
b, _ := json.Marshal(m)
return string(b)
}
// These tests write out all log levels with concurrency turned on and
// (mostly) equivalent fields.
func BenchmarkLevelsKiwiStrict_Logfmt(b *testing.B) {
buf := &bytes.Buffer{}
b.ResetTimer()
l := level.New()
l.With("_n", "bench", "_p", pid)
l.With(timestamp.Set(time.RFC3339))
level.LevelName = "l"
out := kiwi.SinkTo(buf, kiwi.AsLogfmt()).Start()
for i := 0; i < b.N; i++ {
l.Debug(strict.Int("key", 1), strict.Float64("key2", 3.141592), strict.String("key3", "string"), strict.Bool("key4", false))
l.Info(strict.Int("key", 1), strict.Float64("key2", 3.141592), strict.String("key3", "string"), strict.Bool("key4", false))
l.Warn(strict.Int("key", 1), strict.Float64("key2", 3.141592), strict.String("key3", "string"), strict.Bool("key4", false))
l.Error(strict.Int("key", 1), strict.Float64("key2", 3.141592), strict.String("key3", "string"), strict.Bool("key4", false))
}
b.StopTimer()
out.Close()
}
func BenchmarkLevelsKiwiStrictComplex_Logfmt(b *testing.B) {
buf := &bytes.Buffer{}
b.ResetTimer()
l := level.New()
l.With("_n", "bench", "_p", pid)
l.With(timestamp.Set(time.RFC3339))
level.LevelName = "l"
out := kiwi.SinkTo(buf, kiwi.AsLogfmt()).Start()
for i := 0; i < b.N; i++ {
l.Debug(strict.Int("key", 1), strict.Stringer("obj", testObject))
l.Info(strict.Int("key", 1), strict.Stringer("obj", testObject))
l.Warn(strict.Int("key", 1), strict.Stringer("obj", testObject))
l.Error(strict.Int("key", 1), strict.Stringer("obj", testObject))
}
b.StopTimer()
out.Close()
}
func BenchmarkLevelsKiwi_Logfmt(b *testing.B) {
buf := &bytes.Buffer{}
b.ResetTimer()
l := level.New()
l.With("_n", "bench", "_p", pid)
l.With(timestamp.Set(time.RFC3339))
level.LevelName = "l"
out := kiwi.SinkTo(buf, kiwi.AsLogfmt()).Start()
for i := 0; i < b.N; i++ {
l.Debug("key", 1, "key2", 3.141592, "key3", "string", "key4", false)
l.Info("key", 1, "key2", 3.141592, "key3", "string", "key4", false)
l.Warn("key", 1, "key2", 3.141592, "key3", "string", "key4", false)
l.Error("key", 1, "key2", 3.141592, "key3", "string", "key4", false)
}
b.StopTimer()
out.Close()
}
func BenchmarkLevelsKiwiComplex_Logfmt(b *testing.B) {
buf := &bytes.Buffer{}
b.ResetTimer()
l := level.New()
l.With("_n", "bench", "_p", pid)
l.With(timestamp.Set(time.RFC3339))
level.LevelName = "l"
out := kiwi.SinkTo(buf, kiwi.AsLogfmt()).Start()
for i := 0; i < b.N; i++ {
l.Debug("key", 1, "obj", testObject)
l.Info("key", 1, "obj", testObject)
l.Warn("key", 1, "obj", testObject)
l.Error("key", 1, "obj", testObject)
}
b.StopTimer()
out.Close()
}
func BenchmarkLevelsKiwiGlobal_Logfmt(b *testing.B) {
buf := &bytes.Buffer{}
b.ResetTimer()
out := kiwi.SinkTo(buf, kiwi.AsLogfmt()).Start()
for i := 0; i < b.N; i++ {
kiwi.Log("t", time.Now().Format(time.RFC3339), "l", "debug", "_n", "bench", "_p", pid, "key", 1, "key2", 3.141592, "key3", "string", "key4", false)
kiwi.Log("t", time.Now().Format(time.RFC3339), "l", "info", "_n", "bench", "_p", pid, "key", 1, "key2", 3.141592, "key3", "string", "key4", false)
kiwi.Log("t", time.Now().Format(time.RFC3339), "l", "warn", "_n", "bench", "_p", pid, "key", 1, "key2", 3.141592, "key3", "string", "key4", false)
kiwi.Log("t", time.Now().Format(time.RFC3339), "l", "error", "_n", "bench", "_p", pid, "key", 1, "key2", 3.141592, "key3", "string", "key4", false)
}
b.StopTimer()
out.Close()
}