Skip to content

Commit 7de06c4

Browse files
authored
Merge pull request #201 from snabble/slog-max-level
Allow specifying a max level in slog logger
2 parents 963eda0 + a01d064 commit 7de06c4

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

slog/handler.go

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,37 @@ var logLevelsToSlog = map[logrus.Level]slog.Level{
2626

2727
type Option struct {
2828
Level slog.Level
29+
MaxLevel *logrus.Level
2930
Logger *logging.Logger
3031
AttrFromContext []func(ctx context.Context) []slog.Attr
3132
AddSource bool
3233
ReplaceAttr func(groups []string, a slog.Attr) slog.Attr
3334
}
3435

35-
func New() *slog.Logger {
36-
return slog.New(
37-
Option{
38-
Level: logLevelsToSlog[logging.Log.GetLevel()],
39-
Logger: logging.Log,
40-
}.newLogrusHandler())
36+
type OptionFunc func(*Option)
37+
38+
func WithLevel(level logrus.Level) OptionFunc {
39+
return func(o *Option) {
40+
o.Level = logLevelsToSlog[level]
41+
}
42+
}
43+
44+
func WithMaxLevel(level logrus.Level) OptionFunc {
45+
return func(o *Option) {
46+
o.MaxLevel = &level
47+
}
48+
}
49+
50+
func New(opts ...OptionFunc) *slog.Logger {
51+
o := Option{
52+
Level: logLevelsToSlog[logging.Log.GetLevel()],
53+
Logger: logging.Log,
54+
}
55+
for _, fn := range opts {
56+
fn(&o)
57+
}
58+
59+
return slog.New(o.newLogrusHandler())
4160
}
4261

4362
func NewWithLevel(level logrus.Level) *slog.Logger {
@@ -72,6 +91,10 @@ func (h *LogrusHandler) Enabled(_ context.Context, level slog.Level) bool {
7291

7392
func (h *LogrusHandler) Handle(ctx context.Context, record slog.Record) error {
7493
level := logLevelsFromSlog[record.Level]
94+
if h.option.MaxLevel != nil && level > *h.option.MaxLevel {
95+
level = *h.option.MaxLevel
96+
}
97+
7598
fromContext := contextExtractor(ctx, h.option.AttrFromContext)
7699
args := convert(h.option.AddSource, h.option.ReplaceAttr, append(h.attrs, fromContext...), h.groups, &record)
77100

0 commit comments

Comments
 (0)