1package logrus 2 3import ( 4 "io/ioutil" 5 "os" 6 "testing" 7) 8 9func BenchmarkDummyLogger(b *testing.B) { 10 nullf, err := os.OpenFile("/dev/null", os.O_WRONLY, 0666) 11 if err != nil { 12 b.Fatalf("%v", err) 13 } 14 defer nullf.Close() 15 doLoggerBenchmark(b, nullf, &TextFormatter{DisableColors: true}, smallFields) 16} 17 18func BenchmarkDummyLoggerNoLock(b *testing.B) { 19 nullf, err := os.OpenFile("/dev/null", os.O_WRONLY|os.O_APPEND, 0666) 20 if err != nil { 21 b.Fatalf("%v", err) 22 } 23 defer nullf.Close() 24 doLoggerBenchmarkNoLock(b, nullf, &TextFormatter{DisableColors: true}, smallFields) 25} 26 27func doLoggerBenchmark(b *testing.B, out *os.File, formatter Formatter, fields Fields) { 28 logger := Logger{ 29 Out: out, 30 Level: InfoLevel, 31 Formatter: formatter, 32 } 33 entry := logger.WithFields(fields) 34 b.RunParallel(func(pb *testing.PB) { 35 for pb.Next() { 36 entry.Info("aaa") 37 } 38 }) 39} 40 41func doLoggerBenchmarkNoLock(b *testing.B, out *os.File, formatter Formatter, fields Fields) { 42 logger := Logger{ 43 Out: out, 44 Level: InfoLevel, 45 Formatter: formatter, 46 } 47 logger.SetNoLock() 48 entry := logger.WithFields(fields) 49 b.RunParallel(func(pb *testing.PB) { 50 for pb.Next() { 51 entry.Info("aaa") 52 } 53 }) 54} 55 56func BenchmarkLoggerJSONFormatter(b *testing.B) { 57 doLoggerBenchmarkWithFormatter(b, &JSONFormatter{}) 58} 59 60func BenchmarkLoggerTextFormatter(b *testing.B) { 61 doLoggerBenchmarkWithFormatter(b, &TextFormatter{}) 62} 63 64func doLoggerBenchmarkWithFormatter(b *testing.B, f Formatter) { 65 b.SetParallelism(100) 66 log := New() 67 log.Formatter = f 68 log.Out = ioutil.Discard 69 b.RunParallel(func(pb *testing.PB) { 70 for pb.Next() { 71 log. 72 WithField("foo1", "bar1"). 73 WithField("foo2", "bar2"). 74 Info("this is a dummy log") 75 } 76 }) 77} 78