package logrus import ( "fmt" "testing" "time" ) // smallFields is a small size data set for benchmarking var smallFields = Fields{ "foo": "bar", "baz": "qux", "one": "two", "three": "four", } // largeFields is a large size data set for benchmarking var largeFields = Fields{ "foo": "bar", "baz": "qux", "one": "two", "three": "four", "five": "six", "seven": "eight", "nine": "ten", "eleven": "twelve", "thirteen": "fourteen", "fifteen": "sixteen", "seventeen": "eighteen", "nineteen": "twenty", "a": "b", "c": "d", "e": "f", "g": "h", "i": "j", "k": "l", "m": "n", "o": "p", "q": "r", "s": "t", "u": "v", "w": "x", "y": "z", "this": "will", "make": "thirty", "entries": "yeah", } var errorFields = Fields{ "foo": fmt.Errorf("bar"), "baz": fmt.Errorf("qux"), } func BenchmarkErrorTextFormatter(b *testing.B) { doBenchmark(b, &TextFormatter{DisableColors: true}, errorFields) } func BenchmarkSmallTextFormatter(b *testing.B) { doBenchmark(b, &TextFormatter{DisableColors: true}, smallFields) } func BenchmarkLargeTextFormatter(b *testing.B) { doBenchmark(b, &TextFormatter{DisableColors: true}, largeFields) } func BenchmarkSmallColoredTextFormatter(b *testing.B) { doBenchmark(b, &TextFormatter{ForceColors: true}, smallFields) } func BenchmarkLargeColoredTextFormatter(b *testing.B) { doBenchmark(b, &TextFormatter{ForceColors: true}, largeFields) } func BenchmarkSmallJSONFormatter(b *testing.B) { doBenchmark(b, &JSONFormatter{}, smallFields) } func BenchmarkLargeJSONFormatter(b *testing.B) { doBenchmark(b, &JSONFormatter{}, largeFields) } func doBenchmark(b *testing.B, formatter Formatter, fields Fields) { logger := New() entry := &Entry{ Time: time.Time{}, Level: InfoLevel, Message: "message", Data: fields, Logger: logger, } var d []byte var err error for i := 0; i < b.N; i++ { d, err = formatter.Format(entry) if err != nil { b.Fatal(err) } b.SetBytes(int64(len(d))) } }