github.com/rudderlabs/rudder-go-kit@v0.30.0/logger/benchmark_test.go (about)

     1  package logger
     2  
     3  import (
     4  	"testing"
     5  
     6  	"go.uber.org/zap"
     7  	"go.uber.org/zap/zapcore"
     8  
     9  	"github.com/rudderlabs/rudder-go-kit/config"
    10  )
    11  
    12  // BenchmarkKit results:
    13  // non-sugared:	    496.6 ns/op
    14  // sugared:         723.5 ns/op
    15  func BenchmarkKit(b *testing.B) {
    16  	c := config.New()
    17  	c.Set("LOG_LEVEL", "DEBUG")
    18  	c.Set("Logger.consoleJsonFormat", "json")
    19  	c.Set("Logger.discardConsole", true)
    20  	c.Set("Logger.enableFileNameInLog", true)
    21  
    22  	b.Run("non-sugared", func(b *testing.B) {
    23  		f := NewFactory(c)
    24  		l := f.NewLogger()
    25  		defer f.Sync()
    26  
    27  		fields := []Field{
    28  			NewStringField("key1", "111"), NewStringField("key2", "222"),
    29  			NewStringField("key3", "333"), NewStringField("key4", "444"),
    30  			NewStringField("key5", "555"), NewStringField("key6", "666"),
    31  			NewStringField("key7", "777"), NewStringField("key8", "888"),
    32  			NewStringField("key9", "999"), NewStringField("key10", "101010"),
    33  		}
    34  
    35  		b.ResetTimer()
    36  		b.RunParallel(func(pb *testing.PB) {
    37  			for pb.Next() {
    38  				l.Debugn("test", fields...)
    39  			}
    40  		})
    41  	})
    42  
    43  	b.Run("sugared", func(b *testing.B) {
    44  		f := NewFactory(c)
    45  		l := f.NewLogger()
    46  		defer f.Sync()
    47  
    48  		fields := []any{
    49  			"key1", "111", "key2", "222",
    50  			"key3", "333", "key4", "444",
    51  			"key5", "555", "key6", "666",
    52  			"key7", "777", "key8", "888",
    53  			"key9", "999", "key10", "101010",
    54  		}
    55  
    56  		b.ResetTimer()
    57  		b.RunParallel(func(pb *testing.PB) {
    58  			for pb.Next() {
    59  				l.Debugw("test", fields...)
    60  			}
    61  		})
    62  	})
    63  }
    64  
    65  // BenchmarkZap results:
    66  // Zap:         60.96 ns/op
    67  // Zap.Sugar:   94.57 ns/op
    68  func BenchmarkZap(b *testing.B) {
    69  	newZap := func(lvl zapcore.Level) *zap.Logger {
    70  		ec := zap.NewProductionEncoderConfig()
    71  		ec.EncodeDuration = zapcore.NanosDurationEncoder
    72  		ec.EncodeTime = zapcore.EpochNanosTimeEncoder
    73  		enc := zapcore.NewJSONEncoder(ec)
    74  		return zap.New(zapcore.NewCore(
    75  			enc,
    76  			&discarder{},
    77  			lvl,
    78  		))
    79  	}
    80  	b.Run("Zap", func(b *testing.B) {
    81  		logger := newZap(zapcore.DebugLevel)
    82  		b.ResetTimer()
    83  		b.RunParallel(func(pb *testing.PB) {
    84  			for pb.Next() {
    85  				logger.Debug("message", zap.String("key1", "111"), zap.String("key2", "222"))
    86  			}
    87  		})
    88  	})
    89  	b.Run("Zap.Sugar", func(b *testing.B) {
    90  		logger := newZap(zapcore.DebugLevel).Sugar()
    91  		b.ResetTimer()
    92  		b.RunParallel(func(pb *testing.PB) {
    93  			for pb.Next() {
    94  				logger.Debugw("message", "key1", "111", "key2", "222")
    95  			}
    96  		})
    97  	})
    98  }