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