From e7b82f5a333bc6d1242a01800946b6042c48c224 Mon Sep 17 00:00:00 2001 From: Aditya <183531672+iamAdityafr@users.noreply.github.com> Date: Mon, 24 Nov 2025 00:28:56 +0530 Subject: [PATCH 1/2] fix: printLog write error handle --- logs/encoders/base.go | 16 ++++++++++------ logs/encoders/default.go | 10 ++++++++-- logs/encoders/json.go | 10 ++++++++-- logs/encoders/yaml.go | 10 ++++++++-- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/logs/encoders/base.go b/logs/encoders/base.go index 0173994..31691df 100644 --- a/logs/encoders/base.go +++ b/logs/encoders/base.go @@ -81,20 +81,24 @@ func (b *baseEncoder) castToString(arg any) string { // printLog prints the given msgBuffer to the given outputType (stdout or stderr). // If 'file' is not nil, the message is written to the file. -func (b *baseEncoder) printLog(outType s.OutputType, msgBuffer *bytes.Buffer, file *os.File) { +func (b *baseEncoder) printLog(outType s.OutputType, msgBuffer *bytes.Buffer, file *os.File) error { switch outType { case s.StdOutput: - _, _ = os.Stdout.Write(msgBuffer.Bytes()) + _, err := os.Stdout.Write(msgBuffer.Bytes()) + return err case s.StdErrOutput: - _, _ = os.Stderr.Write(msgBuffer.Bytes()) + _, err := os.Stderr.Write(msgBuffer.Bytes()) + return err case s.FileOutput: if file == nil { - _, _ = os.Stderr.Write([]byte("error: file is nil")) - return + _, err := os.Stderr.Write([]byte("error: file is nil")) + return err } - _, _ = file.Write(msgBuffer.Bytes()) + _, err := file.Write(msgBuffer.Bytes()) + return err } + return nil } // getBuffer returns a new bytes buffer from the pool. diff --git a/logs/encoders/default.go b/logs/encoders/default.go index 7f80498..f9fc586 100644 --- a/logs/encoders/default.go +++ b/logs/encoders/default.go @@ -2,6 +2,8 @@ package encoders import ( "bytes" + "fmt" + "os" "sync" "github.com/pho3b/tiny-logger/internal/services" @@ -38,7 +40,9 @@ func (d *DefaultEncoder) Log( ) msgBuffer.WriteByte('\n') - d.printLog(outType, msgBuffer, logger.GetLogFile()) + if err := d.printLog(outType, msgBuffer, logger.GetLogFile()); err != nil { + fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) + } d.putBuffer(msgBuffer) } @@ -60,7 +64,9 @@ func (d *DefaultEncoder) Color(logger s.LoggerConfigsInterface, color c.Color, a msgBuffer.WriteString(c.Reset.String()) msgBuffer.WriteByte('\n') - d.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()) + if err := d.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()); err != nil { + fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) + } d.putBuffer(msgBuffer) } } diff --git a/logs/encoders/json.go b/logs/encoders/json.go index 82c8b0e..46941cc 100644 --- a/logs/encoders/json.go +++ b/logs/encoders/json.go @@ -2,6 +2,8 @@ package encoders import ( "bytes" + "fmt" + "os" "sync" "github.com/pho3b/tiny-logger/internal/services" @@ -40,7 +42,9 @@ func (j *JSONEncoder) Log( ) msgBuffer.WriteByte('\n') - j.printLog(outType, msgBuffer, logger.GetLogFile()) + if err := j.printLog(outType, msgBuffer, logger.GetLogFile()); err != nil { + fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) + } j.putBuffer(msgBuffer) } @@ -65,7 +69,9 @@ func (j *JSONEncoder) Color(logger s.LoggerConfigsInterface, color c.Color, args msgBuffer.WriteString(c.Reset.String()) msgBuffer.WriteByte('\n') - j.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()) + if err := j.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()); err != nil { + fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) + } j.putBuffer(msgBuffer) } } diff --git a/logs/encoders/yaml.go b/logs/encoders/yaml.go index f8d224b..204ca9f 100644 --- a/logs/encoders/yaml.go +++ b/logs/encoders/yaml.go @@ -2,6 +2,8 @@ package encoders import ( "bytes" + "fmt" + "os" "sync" "github.com/pho3b/tiny-logger/internal/services" @@ -40,7 +42,9 @@ func (y *YAMLEncoder) Log( ) msgBuffer.WriteByte('\n') - y.printLog(outType, msgBuffer, logger.GetLogFile()) + if err := y.printLog(outType, msgBuffer, logger.GetLogFile()); err != nil { + fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) + } y.putBuffer(msgBuffer) } @@ -65,7 +69,9 @@ func (y *YAMLEncoder) Color(logger s.LoggerConfigsInterface, color c.Color, args msgBuffer.WriteString(c.Reset.String()) msgBuffer.WriteByte('\n') - y.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()) + if err := y.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()); err != nil { + fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) + } y.putBuffer(msgBuffer) } } From 3eeadfa3c91b1f4a8c80668777f5df002e6a44d0 Mon Sep 17 00:00:00 2001 From: arinaldi Date: Sun, 23 Nov 2025 22:29:54 +0100 Subject: [PATCH 2/2] refactor: only prints the error to the stderr if printLog method fails --- logs/encoders/base.go | 22 ++++++++++++---------- logs/encoders/default.go | 10 ++-------- logs/encoders/json.go | 10 ++-------- logs/encoders/yaml.go | 10 ++-------- 4 files changed, 18 insertions(+), 34 deletions(-) diff --git a/logs/encoders/base.go b/logs/encoders/base.go index 31691df..eb77e37 100644 --- a/logs/encoders/base.go +++ b/logs/encoders/base.go @@ -81,24 +81,26 @@ func (b *baseEncoder) castToString(arg any) string { // printLog prints the given msgBuffer to the given outputType (stdout or stderr). // If 'file' is not nil, the message is written to the file. -func (b *baseEncoder) printLog(outType s.OutputType, msgBuffer *bytes.Buffer, file *os.File) error { +func (b *baseEncoder) printLog(outType s.OutputType, msgBuffer *bytes.Buffer, file *os.File) { + var err error + switch outType { case s.StdOutput: - _, err := os.Stdout.Write(msgBuffer.Bytes()) - return err + _, err = os.Stdout.Write(msgBuffer.Bytes()) case s.StdErrOutput: - _, err := os.Stderr.Write(msgBuffer.Bytes()) - return err + _, err = os.Stderr.Write(msgBuffer.Bytes()) case s.FileOutput: if file == nil { - _, err := os.Stderr.Write([]byte("error: file is nil")) - return err + _, _ = os.Stderr.Write([]byte("tiny-logger-err: given out file is nil")) + return } - _, err := file.Write(msgBuffer.Bytes()) - return err + _, err = file.Write(msgBuffer.Bytes()) + } + + if err != nil { + _, _ = os.Stderr.Write([]byte("tiny-logger-err: " + err.Error() + "\n")) } - return nil } // getBuffer returns a new bytes buffer from the pool. diff --git a/logs/encoders/default.go b/logs/encoders/default.go index f9fc586..7f80498 100644 --- a/logs/encoders/default.go +++ b/logs/encoders/default.go @@ -2,8 +2,6 @@ package encoders import ( "bytes" - "fmt" - "os" "sync" "github.com/pho3b/tiny-logger/internal/services" @@ -40,9 +38,7 @@ func (d *DefaultEncoder) Log( ) msgBuffer.WriteByte('\n') - if err := d.printLog(outType, msgBuffer, logger.GetLogFile()); err != nil { - fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) - } + d.printLog(outType, msgBuffer, logger.GetLogFile()) d.putBuffer(msgBuffer) } @@ -64,9 +60,7 @@ func (d *DefaultEncoder) Color(logger s.LoggerConfigsInterface, color c.Color, a msgBuffer.WriteString(c.Reset.String()) msgBuffer.WriteByte('\n') - if err := d.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()); err != nil { - fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) - } + d.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()) d.putBuffer(msgBuffer) } } diff --git a/logs/encoders/json.go b/logs/encoders/json.go index 46941cc..82c8b0e 100644 --- a/logs/encoders/json.go +++ b/logs/encoders/json.go @@ -2,8 +2,6 @@ package encoders import ( "bytes" - "fmt" - "os" "sync" "github.com/pho3b/tiny-logger/internal/services" @@ -42,9 +40,7 @@ func (j *JSONEncoder) Log( ) msgBuffer.WriteByte('\n') - if err := j.printLog(outType, msgBuffer, logger.GetLogFile()); err != nil { - fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) - } + j.printLog(outType, msgBuffer, logger.GetLogFile()) j.putBuffer(msgBuffer) } @@ -69,9 +65,7 @@ func (j *JSONEncoder) Color(logger s.LoggerConfigsInterface, color c.Color, args msgBuffer.WriteString(c.Reset.String()) msgBuffer.WriteByte('\n') - if err := j.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()); err != nil { - fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) - } + j.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()) j.putBuffer(msgBuffer) } } diff --git a/logs/encoders/yaml.go b/logs/encoders/yaml.go index 204ca9f..f8d224b 100644 --- a/logs/encoders/yaml.go +++ b/logs/encoders/yaml.go @@ -2,8 +2,6 @@ package encoders import ( "bytes" - "fmt" - "os" "sync" "github.com/pho3b/tiny-logger/internal/services" @@ -42,9 +40,7 @@ func (y *YAMLEncoder) Log( ) msgBuffer.WriteByte('\n') - if err := y.printLog(outType, msgBuffer, logger.GetLogFile()); err != nil { - fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) - } + y.printLog(outType, msgBuffer, logger.GetLogFile()) y.putBuffer(msgBuffer) } @@ -69,9 +65,7 @@ func (y *YAMLEncoder) Color(logger s.LoggerConfigsInterface, color c.Color, args msgBuffer.WriteString(c.Reset.String()) msgBuffer.WriteByte('\n') - if err := y.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()); err != nil { - fmt.Fprintf(os.Stderr, "tiny-logger: write error: %v\n", err) - } + y.printLog(s.StdOutput, msgBuffer, logger.GetLogFile()) y.putBuffer(msgBuffer) } }