Log level change
Closed this issue · 1 comments
rytsh commented
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.
rytsh commented
I get it, in the comments of options actually explain of LevelVar value, closing issue!