From c2a228ff0b73858afc984aaf5cb4b722aa1ea789 Mon Sep 17 00:00:00 2001 From: Matthew John Date: Wed, 18 Sep 2024 20:37:22 +0100 Subject: [PATCH] fix: Redirect logging output to stderr Create custom log handlers, which use stderr, based on the slog ConsoleHandler Issue #505 Signed-off-by: Matthew John --- lib/logging.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/logging.go b/lib/logging.go index 33b9eb2f..86d5b105 100644 --- a/lib/logging.go +++ b/lib/logging.go @@ -1,9 +1,11 @@ package lib import ( + "os" + + "github.com/gookit/color" "github.com/gookit/slog" "github.com/gookit/slog/handler" - "os" ) var ( @@ -17,6 +19,22 @@ var ( TraceLogging = slog.Levels{slog.PanicLevel, slog.FatalLevel, slog.ErrorLevel, slog.WarnLevel, slog.InfoLevel, slog.NoticeLevel, slog.DebugLevel, slog.TraceLevel} ) +func NewStderrConsoleWithLF(lf slog.LevelFormattable) *handler.ConsoleHandler { + h := handler.NewIOWriterWithLF(os.Stderr, lf) + + // default use text formatter + f := slog.NewTextFormatter() + // default enable color on console + f.WithEnableColor(color.SupportColor()) + + h.SetFormatter(f) + return h +} + +func NewStderrConsoleHandler(levels []slog.Level) *handler.ConsoleHandler { + return NewStderrConsoleWithLF(slog.NewLvsFormatter(levels)) +} + func InitLogger(logLevel string) *slog.Logger { formatter := slog.NewTextFormatter() formatter.EnableColor = true @@ -26,23 +44,23 @@ func InitLogger(logLevel string) *slog.Logger { var h *handler.ConsoleHandler switch logLevel { case "ERROR": - h = handler.NewConsoleHandler(ErrorLogging) + h = NewStderrConsoleHandler(ErrorLogging) formatter.SetTemplate(loggingTemplateDebug) break case "TRACE": - h = handler.NewConsoleHandler(TraceLogging) + h = NewStderrConsoleHandler(TraceLogging) formatter.SetTemplate(loggingTemplateDebug) break case "DEBUG": - h = handler.NewConsoleHandler(DebugLogging) + h = NewStderrConsoleHandler(DebugLogging) formatter.SetTemplate(loggingTemplateDebug) break case "NOTICE": - h = handler.NewConsoleHandler(NoticeLogging) + h = NewStderrConsoleHandler(NoticeLogging) formatter.SetTemplate(loggingTemplateDebug) break default: - h = handler.NewConsoleHandler(NormalLogging) + h = NewStderrConsoleHandler(NormalLogging) formatter.SetTemplate(loggingTemplate) }