Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(log): Prevent log.Helper sprintf from running early #3209 #3221

Merged
merged 3 commits into from Mar 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
33 changes: 33 additions & 0 deletions log/helper.go
Expand Up @@ -66,18 +66,33 @@ func (h *Helper) WithContext(ctx context.Context) *Helper {
}
}

// Enabled returns true if the given level above this level.
// It delegates to the underlying *Filter.
func (h *Helper) Enabled(level Level) bool {
if l, ok := h.logger.(*Filter); ok {
return level >= l.level
}
return true
}

// Log Print log by level and keyvals.
func (h *Helper) Log(level Level, keyvals ...interface{}) {
_ = h.logger.Log(level, keyvals...)
}

// Debug logs a message at debug level.
func (h *Helper) Debug(a ...interface{}) {
if !h.Enabled(LevelDebug) {
return
}
_ = h.logger.Log(LevelDebug, h.msgKey, h.sprint(a...))
}

// Debugf logs a message at debug level.
func (h *Helper) Debugf(format string, a ...interface{}) {
if !h.Enabled(LevelDebug) {
return
}
_ = h.logger.Log(LevelDebug, h.msgKey, h.sprintf(format, a...))
}

Expand All @@ -88,11 +103,17 @@ func (h *Helper) Debugw(keyvals ...interface{}) {

// Info logs a message at info level.
func (h *Helper) Info(a ...interface{}) {
if !h.Enabled(LevelInfo) {
return
}
_ = h.logger.Log(LevelInfo, h.msgKey, h.sprint(a...))
}

// Infof logs a message at info level.
func (h *Helper) Infof(format string, a ...interface{}) {
if !h.Enabled(LevelInfo) {
return
}
_ = h.logger.Log(LevelInfo, h.msgKey, h.sprintf(format, a...))
}

Expand All @@ -103,11 +124,17 @@ func (h *Helper) Infow(keyvals ...interface{}) {

// Warn logs a message at warn level.
func (h *Helper) Warn(a ...interface{}) {
if !h.Enabled(LevelWarn) {
return
}
_ = h.logger.Log(LevelWarn, h.msgKey, h.sprint(a...))
}

// Warnf logs a message at warnf level.
func (h *Helper) Warnf(format string, a ...interface{}) {
if !h.Enabled(LevelWarn) {
return
}
_ = h.logger.Log(LevelWarn, h.msgKey, h.sprintf(format, a...))
}

Expand All @@ -118,11 +145,17 @@ func (h *Helper) Warnw(keyvals ...interface{}) {

// Error logs a message at error level.
func (h *Helper) Error(a ...interface{}) {
if !h.Enabled(LevelError) {
return
}
_ = h.logger.Log(LevelError, h.msgKey, h.sprint(a...))
}

// Errorf logs a message at error level.
func (h *Helper) Errorf(format string, a ...interface{}) {
if !h.Enabled(LevelError) {
return
}
_ = h.logger.Log(LevelError, h.msgKey, h.sprintf(format, a...))
}

Expand Down
14 changes: 14 additions & 0 deletions log/helper_test.go
Expand Up @@ -46,13 +46,27 @@ func BenchmarkHelperPrint(b *testing.B) {
}
}

func BenchmarkHelperPrintFilterLevel(b *testing.B) {
log := NewHelper(NewFilter(NewStdLogger(io.Discard), FilterLevel(LevelDebug)))
for i := 0; i < b.N; i++ {
log.Debug("test")
}
}

func BenchmarkHelperPrintf(b *testing.B) {
log := NewHelper(NewStdLogger(io.Discard))
for i := 0; i < b.N; i++ {
log.Debugf("%s", "test")
}
}

func BenchmarkHelperPrintfFilterLevel(b *testing.B) {
log := NewHelper(NewFilter(NewStdLogger(io.Discard), FilterLevel(LevelInfo)))
for i := 0; i < b.N; i++ {
log.Debugf("%s", "test")
}
}

func BenchmarkHelperPrintw(b *testing.B) {
log := NewHelper(NewStdLogger(io.Discard))
for i := 0; i < b.N; i++ {
Expand Down