Skip to content

Commit

Permalink
tests: adds logger benchmark. (#133)
Browse files Browse the repository at this point in the history
* tests: adds logger benchmark.

* chore: adds early check for no logger.
  • Loading branch information
jcchavezs committed Apr 2, 2024
1 parent 1f76bac commit 0e2f0b9
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ __debug*
.idea/

build
*.out
coraza-caddy.test
25 changes: 24 additions & 1 deletion logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,24 @@ func newLogger(l *zap.Logger) debuglog.Logger {
}
}

func isZapNop(l *zap.Logger) bool {
// As per zap documentation when a logger is created with NewNop() it will have
// an invalid level
return l.Level() == zapcore.InvalidLevel
}

func (l *logger) WithOutput(w io.Writer) debuglog.Logger {
if w == io.Discard {
return &logger{
Logger: zap.NewNop(),
level: l.level,
}
}

if isZapNop(l.Logger) {
return l
}

return &logger{
Logger: l.Logger.WithOptions(
zap.WrapCore(func(c zapcore.Core) zapcore.Core {
Expand All @@ -42,11 +59,17 @@ func (l *logger) WithOutput(w io.Writer) debuglog.Logger {
}

func (l *logger) WithLevel(level debuglog.Level) debuglog.Logger {
if level == debuglog.LevelNoLog {
return &logger{
Logger: zap.NewNop(),
level: level,
}
}
return &logger{l.Logger, level}
}

func (l *logger) With(fields ...debuglog.ContextField) debuglog.Logger {
if len(fields) == 0 {
if len(fields) == 0 || isZapNop(l.Logger) {
return l
}

Expand Down
41 changes: 41 additions & 0 deletions logger_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright 2024 The OWASP Coraza contributors
// SPDX-License-Identifier: Apache-2.0

package coraza

import (
"os"
"testing"

"github.com/corazawaf/coraza/v3/debuglog"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
)

func BenchmarkLogger(b *testing.B) {
f, err := os.CreateTemp(b.TempDir(), "test.log")
require.NoError(b, err)

cfg := zap.NewProductionConfig()
cfg.OutputPaths = []string{f.Name()}

l, err := cfg.Build()
require.NoError(b, err)

var (
l1, l2, l3 debuglog.Logger
debugLogger = newLogger(l)
)

b.ResetTimer()
for i := 0; i < b.N; i++ {
l1 = debugLogger.With(debuglog.Str("key1", "value1"))
l1.Info().Msg("message1")

l2 = debugLogger.With(debuglog.Str("key2", "value2"), debuglog.Str("key3", "value3"))
l2.Info().Msg("message2&3")

l3 = debugLogger.With(debuglog.Str("key4", "value4"))
l3.Info().Msg("message4")
}
}

0 comments on commit 0e2f0b9

Please sign in to comment.