forked from TrueCloudLab/restic
101 lines
2.1 KiB
Go
101 lines
2.1 KiB
Go
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)))
|
|
}
|
|
}
|