lmittmann/tint

Log level change

Closed this issue · 1 comments

Is there any way to change log level after initialized and set as the default logger?

type HandlerWrapper struct {
	TintOpts *tint.Options
	slog.Handler
}

func (h *HandlerWrapper) SetLogLevel(levelStr string) error {
	if slogLevel, ok := h.TintOpts.Level.(*slog.Level); ok {
		if err := slogLevel.UnmarshalText([]byte(levelStr)); err != nil {
			return err
		}
	}

	return nil
}

type SetLeveler interface {
	SetLogLevel(levelStr string) error
}
tintOpts := &tint.Options{
	AddSource:  opt.Caller,
	Level:      &sloglevel,
	TimeFormat: timeFormat(opt.TimeFormat, pretty),
}

logger = slog.New(
	&HandlerWrapper{
		TintOpts: tintOpts,
		Handler: tint.NewHandler(
			opt.Writer,
			tintOpts,
		),
	},
)

And default function

func SetLevel(levelStr string) error {
	if wrapper, ok := slog.Default().Handler().(SetLeveler); ok {
		if err := wrapper.SetLogLevel(levelStr); err != nil {
			return err
		}
	}

	return nil
}

Is it good to have this kind of function directly?
This issue seems problem with slog not the tint handler but I don't know how people doing it.

I get it, in the comments of options actually explain of LevelVar value, closing issue!