@@ -26,18 +26,37 @@ var logLevelsToSlog = map[logrus.Level]slog.Level{
2626
2727type 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
4362func NewWithLevel (level logrus.Level ) * slog.Logger {
@@ -72,6 +91,10 @@ func (h *LogrusHandler) Enabled(_ context.Context, level slog.Level) bool {
7291
7392func (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