Last active
May 8, 2018 20:24
-
-
Save rs/988efc55268b7d4df5ffb01a293c4bdc to your computer and use it in GitHub Desktop.
Zero to One log benchmark
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package logbench | |
import ( | |
"errors" | |
"io/ioutil" | |
"testing" | |
"github.com/francoispqt/gojay" | |
"github.com/francoispqt/onelog" | |
) | |
func (o obj) MarshalObject(enc *gojay.Encoder) { | |
enc.AddStringKey("Pub", o.Pub) | |
enc.AddStringKey("Tag", o.Tag) | |
enc.AddIntKey("priv", o.priv) | |
} | |
func (o obj) IsNil() bool { | |
return false | |
} | |
func BenchmarkOnelogFields(b *testing.B) { | |
logger := onelog.New(ioutil.Discard, onelog.ALL) | |
benchmarkOnelogFields(b, logger) | |
} | |
func BenchmarkOnelogFieldsDisabled(b *testing.B) { | |
logger := onelog.New(ioutil.Discard, 0) | |
benchmarkOnelogFields(b, logger) | |
} | |
func benchmarkOnelogFields(b *testing.B, logger *onelog.Logger) { | |
err := errors.New("some error") | |
o := obj{"a", "a", 0} | |
b.ResetTimer() | |
b.Run("Bool", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.InfoWithFields("some message", func(e onelog.Entry) { | |
e.Bool("k", true) | |
}) | |
} | |
}) | |
}) | |
b.Run("Int", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.InfoWithFields("some message", func(e onelog.Entry) { | |
e.Int("k", 123) | |
}) | |
} | |
}) | |
}) | |
b.Run("Float", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.InfoWithFields("some message", func(e onelog.Entry) { | |
e.Float("k", 1.23) | |
}) | |
} | |
}) | |
}) | |
b.Run("String", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.InfoWithFields("some message", func(e onelog.Entry) { | |
e.String("k", "foo") | |
}) | |
} | |
}) | |
}) | |
b.Run("Error", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.InfoWithFields("some message", func(e onelog.Entry) { | |
e.Error("k", err) | |
}) | |
} | |
}) | |
}) | |
b.Run("Object", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.InfoWithFields("some message", func(e onelog.Entry) { | |
e.Object("k", o) | |
}) | |
} | |
}) | |
}) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package logbench | |
import ( | |
"errors" | |
"io/ioutil" | |
"testing" | |
"github.com/rs/zerolog" | |
) | |
type obj struct { | |
Pub string | |
Tag string `json:"tag"` | |
priv int | |
} | |
func (o obj) MarshalZerologObject(e *zerolog.Event) { | |
e.Str("Pub", o.Pub). | |
Str("Tag", o.Tag). | |
Int("priv", o.priv) | |
} | |
func BenchmarkZerologFields(b *testing.B) { | |
logger := zerolog.New(ioutil.Discard) | |
benchmarkZerologFields(b, logger) | |
} | |
func BenchmarkZerologFieldsDisabled(b *testing.B) { | |
logger := zerolog.New(ioutil.Discard).Level(zerolog.Disabled) | |
benchmarkZerologFields(b, logger) | |
} | |
func benchmarkZerologFields(b *testing.B, logger zerolog.Logger) { | |
err := errors.New("some error") | |
o := obj{"a", "a", 0} | |
b.ResetTimer() | |
b.Run("Bool", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.Info().Bool("k", true).Msg("some message") | |
} | |
}) | |
}) | |
b.Run("Int", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.Info().Int("k", 123).Msg("some message") | |
} | |
}) | |
}) | |
b.Run("Float", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.Info().Float32("k", 1.23).Msg("some message") | |
} | |
}) | |
}) | |
b.Run("String", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.Info().Str("k", "foo").Msg("some message") | |
} | |
}) | |
}) | |
b.Run("Error", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.Info().AnErr("k", err).Msg("some message") | |
} | |
}) | |
}) | |
b.Run("Object", func(b *testing.B) { | |
b.RunParallel(func(pb *testing.PB) { | |
for pb.Next() { | |
logger.Info().Object("k", o).Msg("some message") | |
} | |
}) | |
}) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Fist iteration results: