package logrus import ( "os" "testing" ) // smallFields is a small size data set for benchmarking var loggerFields = Fields{ "foo": "bar", "baz": "qux", "one": "two", "three": "four", } func BenchmarkDummyLogger(b *testing.B) { nullf, err := os.OpenFile("/dev/null", os.O_WRONLY, 0666) if err != nil { b.Fatalf("%v", err) } defer nullf.Close() doLoggerBenchmark(b, nullf, &TextFormatter{DisableColors: true}, smallFields) } func BenchmarkDummyLoggerNoLock(b *testing.B) { nullf, err := os.OpenFile("/dev/null", os.O_WRONLY|os.O_APPEND, 0666) if err != nil { b.Fatalf("%v", err) } defer nullf.Close() doLoggerBenchmarkNoLock(b, nullf, &TextFormatter{DisableColors: true}, smallFields) } func doLoggerBenchmark(b *testing.B, out *os.File, formatter Formatter, fields Fields) { logger := Logger{ Out: out, Level: InfoLevel, Formatter: formatter, } entry := logger.WithFields(fields) b.RunParallel(func(pb *testing.PB) { for pb.Next() { entry.Info("aaa") } }) } func doLoggerBenchmarkNoLock(b *testing.B, out *os.File, formatter Formatter, fields Fields) { logger := Logger{ Out: out, Level: InfoLevel, Formatter: formatter, } logger.SetNoLock() entry := logger.WithFields(fields) b.RunParallel(func(pb *testing.PB) { for pb.Next() { entry.Info("aaa") } }) }