1
0
mirror of https://github.com/go-kratos/kratos.git synced 2025-03-17 21:07:54 +02:00

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

* feat(log): Prevent log.Helper sprintf from running early

* fix(log): add benchmark helper filter level

* chore(log): rename log Level Enabled
This commit is contained in:
言肆 2024-03-15 11:09:57 +08:00 committed by GitHub
parent e11acb685e
commit d4edd442bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 47 additions and 0 deletions

View File

@ -66,6 +66,15 @@ 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...)
@ -73,11 +82,17 @@ func (h *Helper) Log(level Level, keyvals ...interface{}) {
// 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...))
}
@ -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...))
}
@ -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...))
}
@ -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...))
}

View File

@ -46,6 +46,13 @@ 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++ {
@ -53,6 +60,13 @@ func BenchmarkHelperPrintf(b *testing.B) {
}
}
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++ {