Skip to content

Commit df43be8

Browse files
Rework bench (#79)
1 parent 113b1ed commit df43be8

File tree

20 files changed

+355
-279
lines changed

20 files changed

+355
-279
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
test:
2-
go test --race -gcflags=-l -v ./...
2+
go test --race -gcflags=-l ./...
3+
4+
bench:
5+
go test -bench=. -gcflags=-l ./...

benchmark_test.go

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package logger_test
2+
3+
import (
4+
"errors"
5+
"testing"
6+
"time"
7+
8+
"github.com/gol4ng/logger"
9+
"github.com/gol4ng/logger/formatter"
10+
"github.com/gol4ng/logger/handler"
11+
"github.com/gol4ng/logger/middleware"
12+
)
13+
14+
type NopWriter struct{}
15+
16+
func (w *NopWriter) Write(_ []byte) (n int, err error) {
17+
return 0, nil
18+
}
19+
20+
type loggerToTest struct {
21+
name string
22+
logger logger.LoggerInterface
23+
}
24+
25+
func loggersToBench() []loggerToTest {
26+
return []loggerToTest{
27+
{
28+
"nop",
29+
logger.NewNopLogger(),
30+
},
31+
{
32+
"stream line",
33+
logger.NewLogger(
34+
handler.Stream(&NopWriter{}, formatter.NewLine("%[2]s | %[1]s")),
35+
),
36+
},
37+
{
38+
"min level filter",
39+
logger.NewLogger(middleware.MinLevelFilter(logger.WarningLevel)(logger.NopHandler)),
40+
},
41+
{
42+
"max level filter",
43+
logger.NewLogger(middleware.MaxLevelFilter(logger.WarningLevel)(logger.NopHandler)),
44+
},
45+
{
46+
"range level filter",
47+
logger.NewLogger(middleware.RangeLevelFilter(logger.WarningLevel, logger.InfoLevel)(logger.NopHandler)),
48+
},
49+
{
50+
"placeholder",
51+
logger.NewLogger(middleware.Placeholder()(logger.NopHandler)),
52+
},
53+
}
54+
}
55+
56+
func getEntries() []logger.Entry {
57+
return []logger.Entry{
58+
{
59+
Message: "test %my_key% message",
60+
Level: logger.WarningLevel,
61+
Context: logger.NewContext().
62+
Add("my_key", "my_value").
63+
Add("my_key2", "my_value2").
64+
Add("my_key3", "my_value3").
65+
Add("my_key4", "my_value4").
66+
Add("my_key5", "my_value5"),
67+
},
68+
}
69+
}
70+
71+
func BenchmarkMiddleware(b *testing.B) {
72+
for _, entry := range getEntries() {
73+
for _, m := range loggersToBench() {
74+
b.Run(m.name+"_"+entry.Message, func(b *testing.B) {
75+
b.ReportAllocs()
76+
b.ResetTimer()
77+
for i := 0; i < b.N; i++ {
78+
m.logger.Log(entry.Message, entry.Level, *(entry.Context.Slice())...)
79+
}
80+
})
81+
}
82+
}
83+
}
84+
85+
func BenchmarkContext_Add(b *testing.B) {
86+
tests := []struct {
87+
name string
88+
data interface{}
89+
}{
90+
{name: "nil", data: nil},
91+
{name: "boolean", data: false},
92+
{name: "int", data: 1234},
93+
{name: "int8", data: int8(123)},
94+
{name: "int16", data: int16(1234)},
95+
{name: "int32", data: int32(1234)},
96+
{name: "int64", data: int64(1234)},
97+
{name: "uint8", data: uint8(123)},
98+
{name: "uint16", data: uint16(1234)},
99+
{name: "uint32", data: uint32(1234)},
100+
{name: "uint64", data: uint64(1234)},
101+
{name: "uintptr", data: uintptr(1234)},
102+
{name: "float32", data: float32(1234.56)},
103+
{name: "float64", data: float64(1234.56)},
104+
{name: "complex64", data: complex64(123)},
105+
{name: "complex128", data: complex128(123)},
106+
{name: "string", data: "example"},
107+
{name: "[]byte", data: []byte("example")},
108+
{name: "error", data: errors.New("example")},
109+
{name: "time", data: time.Now()},
110+
{name: "duration", data: time.Second},
111+
{name: "stringer", data: MyStringer{}},
112+
{name: "reflect", data: struct{}{}},
113+
}
114+
ctx := logger.NewContext()
115+
116+
for _, tt := range tests {
117+
b.Run("context_add_"+tt.name, func(b *testing.B) {
118+
b.ReportAllocs()
119+
b.ResetTimer()
120+
for i := 0; i < b.N; i++ {
121+
ctx.Add("my_message", tt.data)
122+
}
123+
})
124+
}
125+
}

benchmarks/context_test.go

Lines changed: 0 additions & 27 deletions
This file was deleted.

benchmarks/formatter/default_test.go

Lines changed: 0 additions & 19 deletions
This file was deleted.

benchmarks/formatter/gelf_test.go

Lines changed: 0 additions & 20 deletions
This file was deleted.

benchmarks/formatter/json_test.go

Lines changed: 0 additions & 19 deletions
This file was deleted.

benchmarks/formatter/line_test.go

Lines changed: 0 additions & 19 deletions
This file was deleted.

benchmarks/handler/group_test.go

Lines changed: 0 additions & 22 deletions
This file was deleted.

benchmarks/handler/stream_test.go

Lines changed: 0 additions & 25 deletions
This file was deleted.

benchmarks/logger_test.go

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)