208 lines
3.7 KiB
Go
208 lines
3.7 KiB
Go
// +build go1.3
|
|
|
|
package log15
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io/ioutil"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func BenchmarkStreamNoCtx(b *testing.B) {
|
|
lg := New()
|
|
|
|
buf := bytes.Buffer{}
|
|
lg.SetHandler(StreamHandler(&buf, LogfmtFormat()))
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
buf.Reset()
|
|
}
|
|
}
|
|
|
|
func BenchmarkDiscard(b *testing.B) {
|
|
lg := New()
|
|
lg.SetHandler(DiscardHandler())
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
}
|
|
}
|
|
|
|
func BenchmarkCallerFileHandler(b *testing.B) {
|
|
lg := New()
|
|
lg.SetHandler(CallerFileHandler(DiscardHandler()))
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
}
|
|
}
|
|
|
|
func BenchmarkCallerFuncHandler(b *testing.B) {
|
|
lg := New()
|
|
lg.SetHandler(CallerFuncHandler(DiscardHandler()))
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
}
|
|
}
|
|
|
|
func BenchmarkLogfmtNoCtx(b *testing.B) {
|
|
r := Record{
|
|
Time: time.Now(),
|
|
Lvl: LvlInfo,
|
|
Msg: "test message",
|
|
Ctx: []interface{}{},
|
|
}
|
|
|
|
logfmt := LogfmtFormat()
|
|
for i := 0; i < b.N; i++ {
|
|
logfmt.Format(&r)
|
|
}
|
|
}
|
|
|
|
func BenchmarkJsonNoCtx(b *testing.B) {
|
|
r := Record{
|
|
Time: time.Now(),
|
|
Lvl: LvlInfo,
|
|
Msg: "test message",
|
|
Ctx: []interface{}{},
|
|
}
|
|
|
|
jsonfmt := JsonFormat()
|
|
for i := 0; i < b.N; i++ {
|
|
jsonfmt.Format(&r)
|
|
}
|
|
}
|
|
|
|
func BenchmarkMultiLevelFilter(b *testing.B) {
|
|
handler := MultiHandler(
|
|
LvlFilterHandler(LvlDebug, DiscardHandler()),
|
|
LvlFilterHandler(LvlError, DiscardHandler()),
|
|
)
|
|
|
|
lg := New()
|
|
lg.SetHandler(handler)
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
}
|
|
}
|
|
|
|
func BenchmarkDescendant1(b *testing.B) {
|
|
lg := New()
|
|
lg.SetHandler(DiscardHandler())
|
|
lg = lg.New()
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
}
|
|
}
|
|
|
|
func BenchmarkDescendant2(b *testing.B) {
|
|
lg := New()
|
|
lg.SetHandler(DiscardHandler())
|
|
for i := 0; i < 2; i++ {
|
|
lg = lg.New()
|
|
}
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
}
|
|
}
|
|
|
|
func BenchmarkDescendant4(b *testing.B) {
|
|
lg := New()
|
|
lg.SetHandler(DiscardHandler())
|
|
for i := 0; i < 4; i++ {
|
|
lg = lg.New()
|
|
}
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
}
|
|
}
|
|
|
|
func BenchmarkDescendant8(b *testing.B) {
|
|
lg := New()
|
|
lg.SetHandler(DiscardHandler())
|
|
for i := 0; i < 8; i++ {
|
|
lg = lg.New()
|
|
}
|
|
for i := 0; i < b.N; i++ {
|
|
lg.Info("test message")
|
|
}
|
|
}
|
|
|
|
// Copied from https://github.com/uber-go/zap/blob/master/benchmarks/log15_bench_test.go
|
|
// (MIT License)
|
|
func newLog15() Logger {
|
|
logger := New()
|
|
logger.SetHandler(StreamHandler(ioutil.Discard, JsonFormat()))
|
|
return logger
|
|
}
|
|
|
|
var errExample = errors.New("fail")
|
|
|
|
type user struct {
|
|
Name string `json:"name"`
|
|
Email string `json:"email"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
var _jane = user{
|
|
Name: "Jane Doe",
|
|
Email: "jane@test.com",
|
|
CreatedAt: time.Date(1980, 1, 1, 12, 0, 0, 0, time.UTC),
|
|
}
|
|
|
|
func BenchmarkLog15AddingFields(b *testing.B) {
|
|
logger := newLog15()
|
|
b.ResetTimer()
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
logger.Info("Go fast.",
|
|
"int", 1,
|
|
"int64", int64(1),
|
|
"float", 3.0,
|
|
"string", "four!",
|
|
"bool", true,
|
|
"time", time.Unix(0, 0),
|
|
"error", errExample.Error(),
|
|
"duration", time.Second,
|
|
"user-defined type", _jane,
|
|
"another string", "done!",
|
|
)
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkLog15WithAccumulatedContext(b *testing.B) {
|
|
logger := newLog15().New(
|
|
"int", 1,
|
|
"int64", int64(1),
|
|
"float", 3.0,
|
|
"string", "four!",
|
|
"bool", true,
|
|
"time", time.Unix(0, 0),
|
|
"error", errExample.Error(),
|
|
"duration", time.Second,
|
|
"user-defined type", _jane,
|
|
"another string", "done!",
|
|
)
|
|
b.ResetTimer()
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
logger.Info("Go really fast.")
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkLog15WithoutFields(b *testing.B) {
|
|
logger := newLog15()
|
|
b.ResetTimer()
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
logger.Info("Go fast.")
|
|
}
|
|
})
|
|
}
|