Skip to content

Commit

Permalink
refactor(core/zap): clean up zap module and add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tessig committed Aug 17, 2023
1 parent 2ab0354 commit a7f9476
Show file tree
Hide file tree
Showing 5 changed files with 527 additions and 107 deletions.
16 changes: 16 additions & 0 deletions core/zap/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import (
"flamingo.me/flamingo/v3/framework/web"
)

type Option func(*Logger)

var (
logCount = stats.Int64("flamingo/zap/logs", "Count of logs", stats.UnitDimensionless)
keyLevel, _ = tag.NewKey("level")
Expand All @@ -38,6 +40,18 @@ type (
}
)

func NewLogger(logger *zap.Logger, options ...Option) *Logger {
l := &Logger{
Logger: logger,
}

for _, option := range options {
option(l)
}

return l
}

// WithContext returns a logger with fields filled from the context
// businessId: From Header X-Business-ID
// client_ip: From Header X-Forwarded-For or request if header is empty
Expand Down Expand Up @@ -67,6 +81,7 @@ func (l *Logger) WithContext(ctx context.Context) flamingo.Logger {
fields[flamingo.LogKeySession] = session.IDHash()
}
}

return l.WithFields(fields)
}

Expand Down Expand Up @@ -158,6 +173,7 @@ func (l *Logger) WithFields(fields map[flamingo.LogKey]interface{}) flamingo.Log
copy(newFields, l.fields)

area := l.configArea

for key, value := range fields {
if key == flamingo.LogKeyArea {
area = value.(string)
Expand Down
121 changes: 121 additions & 0 deletions core/zap/logger_benchmark_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package zap_test

import (
"testing"

"flamingo.me/dingo"
"github.com/stretchr/testify/require"

"flamingo.me/flamingo/v3/core/zap"
"flamingo.me/flamingo/v3/framework/config"
"flamingo.me/flamingo/v3/framework/flamingo"
)

func BenchmarkLogger(b *testing.B) {
zapModule := new(zap.Module)
area := config.NewArea("test", []dingo.Module{zapModule})
err := config.Load(area, "",
// Warn Level so that the benchmark does not print to output
config.AdditionalConfig([]string{"core.zap.loglevel: Warn"}))
require.NoError(b, err)

injector, err := area.GetInitializedInjector()
require.NoError(b, err)

l, err := injector.GetInstance(new(flamingo.Logger))
require.NoError(b, err)

require.IsTypef(b, new(zap.Logger), l, "logger must be a *zap.Logger")
logger := l.(flamingo.Logger)

b.Run("withField-1-log", func(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
fieldedLogger := logger.
WithField("key1", "value1").
WithField("key2", "value2").
WithField("key3", "value3").
WithField("key4", "value4").
WithField("key5", "value5").
WithField("key6", "value6")
fieldedLogger.Info("Test Log")
}
})
})
b.Run("withFields-1-log", func(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
fieldedLogger := logger.
WithFields(
map[flamingo.LogKey]interface{}{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5",
"key6": "value6",
})
fieldedLogger.Info("Test Log")
}
})
})
b.Run("withField-each-log", func(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
fieldedLogger := logger.WithField("key1", "value1")
fieldedLogger.Info("Test Log")

fieldedLogger = fieldedLogger.WithField("key2", "value2")
fieldedLogger.Info("Test Log")

fieldedLogger = fieldedLogger.WithField("key3", "value3")
fieldedLogger.Info("Test Log")

fieldedLogger = fieldedLogger.WithField("key4", "value4")
fieldedLogger.Info("Test Log")

fieldedLogger = fieldedLogger.WithField("key5", "value5")
fieldedLogger.Info("Test Log")

fieldedLogger = fieldedLogger.WithField("key6", "value6")
fieldedLogger.Info("Test Log")
}
})
})

b.Run("withFields-many-logs", func(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
fieldedLogger := logger.
WithFields(
map[flamingo.LogKey]interface{}{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5",
"key6": "value6",
})

fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
fieldedLogger.Info("Test Log")
}
})
})
}
Loading

0 comments on commit a7f9476

Please sign in to comment.