Skip to content

Commit f673e4d

Browse files
Improve perf with level guard in slogWrapper calls (#1374)
Previously, calls to methods such as (*slogWrapper).Debug and (*slogWrapper).Debugf always resulted in calls to fmt.Sprint and fmt.Sprintf respectively, regardless of whether the log level in question was even enabled. Calls to fmt.Sprintf in particular can be costly from a performance standpoint. This change prevents such calls unless the log level in question is currently enabled. Benchmarks on an Apple M3 Max result in a ~7x speed improvement in 'f' method variants when the log level in question is disabled.
1 parent e8bbcb4 commit f673e4d

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

pulsar/log/wrapper_slog.go

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package log
2121

2222
import (
23+
"context"
2324
"fmt"
2425
"log/slog"
2526
)
@@ -29,39 +30,55 @@ type slogWrapper struct {
2930
}
3031

3132
func (s *slogWrapper) Debug(args ...any) {
32-
message := s.tryDetermineMessage(args...)
33-
s.logger.Debug(message)
33+
if s.logger.Handler().Enabled(context.Background(), slog.LevelDebug) {
34+
message := s.tryDetermineMessage(args...)
35+
s.logger.Debug(message)
36+
}
3437
}
3538

3639
func (s *slogWrapper) Info(args ...any) {
37-
message := s.tryDetermineMessage(args...)
38-
s.logger.Info(message)
40+
if s.logger.Handler().Enabled(context.Background(), slog.LevelInfo) {
41+
message := s.tryDetermineMessage(args...)
42+
s.logger.Info(message)
43+
}
3944
}
4045

4146
func (s *slogWrapper) Error(args ...any) {
42-
message := s.tryDetermineMessage(args...)
43-
s.logger.Error(message)
47+
if s.logger.Handler().Enabled(context.Background(), slog.LevelError) {
48+
message := s.tryDetermineMessage(args...)
49+
s.logger.Error(message)
50+
}
4451
}
4552

4653
func (s *slogWrapper) Warn(args ...any) {
47-
message := s.tryDetermineMessage(args...)
48-
s.logger.Warn(message)
54+
if s.logger.Handler().Enabled(context.Background(), slog.LevelWarn) {
55+
message := s.tryDetermineMessage(args...)
56+
s.logger.Warn(message)
57+
}
4958
}
5059

5160
func (s *slogWrapper) Debugf(format string, args ...any) {
52-
s.logger.Debug(fmt.Sprintf(format, args...))
61+
if s.logger.Handler().Enabled(context.Background(), slog.LevelDebug) {
62+
s.logger.Debug(fmt.Sprintf(format, args...))
63+
}
5364
}
5465

5566
func (s *slogWrapper) Infof(format string, args ...any) {
56-
s.logger.Info(fmt.Sprintf(format, args...))
67+
if s.logger.Handler().Enabled(context.Background(), slog.LevelInfo) {
68+
s.logger.Info(fmt.Sprintf(format, args...))
69+
}
5770
}
5871

5972
func (s *slogWrapper) Warnf(format string, args ...any) {
60-
s.logger.Warn(fmt.Sprintf(format, args...))
73+
if s.logger.Handler().Enabled(context.Background(), slog.LevelWarn) {
74+
s.logger.Warn(fmt.Sprintf(format, args...))
75+
}
6176
}
6277

6378
func (s *slogWrapper) Errorf(format string, args ...any) {
64-
s.logger.Error(fmt.Sprintf(format, args...))
79+
if s.logger.Handler().Enabled(context.Background(), slog.LevelError) {
80+
s.logger.Error(fmt.Sprintf(format, args...))
81+
}
6582
}
6683

6784
func (s *slogWrapper) SubLogger(fields Fields) Logger {

0 commit comments

Comments
 (0)