From 65fe4f101f68758844e0cfe2ce602f7402253372 Mon Sep 17 00:00:00 2001 From: Xevion Date: Tue, 26 Aug 2025 00:23:01 -0500 Subject: [PATCH] fix: proper development logger --- cmd/banner/main.go | 2 +- internal/utils/logs.go | 43 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/cmd/banner/main.go b/cmd/banner/main.go index 7236f62..1daa3c9 100644 --- a/cmd/banner/main.go +++ b/cmd/banner/main.go @@ -63,7 +63,7 @@ func init() { } if isDevelopment == "development" { - log.Logger = zerolog.New(utils.LogSplitter{Std: os.Stdout, Err: os.Stderr}).With().Timestamp().Logger() + log.Logger = zerolog.New(utils.NewConsoleWriter()).With().Timestamp().Logger() } else { log.Logger = zerolog.New(utils.LogSplitter{Std: os.Stdout, Err: os.Stderr}).With().Timestamp().Logger() } diff --git a/internal/utils/logs.go b/internal/utils/logs.go index 6e15f66..c4bc7f1 100644 --- a/internal/utils/logs.go +++ b/internal/utils/logs.go @@ -14,7 +14,48 @@ var ( errConsole = zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: timeFormat} ) -// logSplitter implements zerolog.LevelWriter +// NewConsoleWriter creates a new console writer with improved formatting for development +func NewConsoleWriter() zerolog.LevelWriter { + return &ConsoleLogSplitter{ + stdConsole: zerolog.ConsoleWriter{ + Out: os.Stdout, + TimeFormat: timeFormat, + NoColor: false, + PartsOrder: []string{zerolog.TimestampFieldName, zerolog.LevelFieldName, zerolog.MessageFieldName}, + PartsExclude: []string{}, + FieldsExclude: []string{}, + }, + errConsole: zerolog.ConsoleWriter{ + Out: os.Stderr, + TimeFormat: timeFormat, + NoColor: false, + PartsOrder: []string{zerolog.TimestampFieldName, zerolog.LevelFieldName, zerolog.MessageFieldName}, + PartsExclude: []string{}, + FieldsExclude: []string{}, + }, + } +} + +// ConsoleLogSplitter implements zerolog.LevelWriter with console formatting +type ConsoleLogSplitter struct { + stdConsole zerolog.ConsoleWriter + errConsole zerolog.ConsoleWriter +} + +// Write should not be called +func (c *ConsoleLogSplitter) Write(p []byte) (n int, err error) { + return c.stdConsole.Write(p) +} + +// WriteLevel write to the appropriate output with console formatting +func (c *ConsoleLogSplitter) WriteLevel(level zerolog.Level, p []byte) (n int, err error) { + if level <= zerolog.WarnLevel { + return c.stdConsole.Write(p) + } + return c.errConsole.Write(p) +} + +// LogSplitter implements zerolog.LevelWriter type LogSplitter struct { Std io.Writer Err io.Writer