From 00d3e6d532f8c875c50530881817d18df5845505 Mon Sep 17 00:00:00 2001 From: Markus Ongyerth Date: Tue, 9 Sep 2025 09:47:22 +0000 Subject: [PATCH 1/2] Add a way to configure the loglevel The flagset is supported by * stdlib * pflags * cobra (via pflags) This way we also avoid magic things just happening, but can expose a consistent cmdline API --- multiwriter.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/multiwriter.go b/multiwriter.go index 4d8b1dc..4dd2c71 100644 --- a/multiwriter.go +++ b/multiwriter.go @@ -15,12 +15,41 @@ package ilog import ( + "flag" "fmt" "io" "log/slog" "os" + "strings" ) +var ( + level slog.Level = slog.LevelInfo +) + +func logLevelFromString(str string) (slog.Level, error) { + switch str { + case "debug": + return slog.LevelDebug, nil + case "info": + return slog.LevelInfo, nil + case "warn": + return slog.LevelWarn, nil + case "error": + return slog.LevelError, nil + default: + return slog.LevelInfo, fmt.Errorf("unknown log level %s", str) + } +} + +func SetupFlags(fs *flag.FlagSet) { + fs.Func("log-level", "Sets the log level. Allowed values are: debug, info, warn, error", func(str string) error { + var err error + level, err = logLevelFromString(strings.ToLower(str)) + return err + }) +} + type multiCloser struct { closer []io.Closer } @@ -55,7 +84,7 @@ func Setup(fs ...string) (io.Closer, error) { mc.closer = append(mc.closer, w) writer = append(writer, w) } - nh := NewLogHandler(slog.LevelInfo, io.MultiWriter(writer...)) + nh := NewLogHandler(level, io.MultiWriter(writer...)) slog.SetDefault(slog.New(nh)) return &mc, nil } From 1888844e4e92414b3b6f27a11aaec2ebd574a057 Mon Sep 17 00:00:00 2001 From: Markus Ongyerth Date: Tue, 9 Sep 2025 09:56:52 +0000 Subject: [PATCH 2/2] Add 'warning' as allowed flag value --- multiwriter.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/multiwriter.go b/multiwriter.go index 4dd2c71..998f560 100644 --- a/multiwriter.go +++ b/multiwriter.go @@ -33,11 +33,11 @@ func logLevelFromString(str string) (slog.Level, error) { return slog.LevelDebug, nil case "info": return slog.LevelInfo, nil - case "warn": + case "warn", "warning": return slog.LevelWarn, nil case "error": return slog.LevelError, nil - default: + default: return slog.LevelInfo, fmt.Errorf("unknown log level %s", str) } }