From 8eb474c0ab12dbc176c0ac57860ffec8cac87600 Mon Sep 17 00:00:00 2001 From: mstmdev Date: Fri, 7 Jan 2022 00:22:28 +0800 Subject: [PATCH 1/5] Use the out.Write to write the log content immediately, because the LogFormatter returns a string, the fmt.Fprint is unnecessary here --- logger.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/logger.go b/logger.go index 61b84546..2954709a 100644 --- a/logger.go +++ b/logger.go @@ -6,6 +6,7 @@ package gin import ( "fmt" + "github.com/gin-gonic/gin/internal/bytesconv" "io" "net/http" "os" @@ -264,7 +265,7 @@ func LoggerWithConfig(conf LoggerConfig) HandlerFunc { param.Path = path - fmt.Fprint(out, formatter(param)) + out.Write(bytesconv.StringToBytes(formatter(param))) } } } From 46516f7d85e42e57ab971dd97575c24d8813bc35 Mon Sep 17 00:00:00 2001 From: mstmdev Date: Fri, 25 Mar 2022 15:05:46 +0800 Subject: [PATCH 2/5] Fix lint --- logger.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/logger.go b/logger.go index 8a8a18a2..67ca6399 100644 --- a/logger.go +++ b/logger.go @@ -6,12 +6,12 @@ package gin import ( "fmt" - "github.com/gin-gonic/gin/internal/bytesconv" "io" "net/http" "os" "time" + "github.com/gin-gonic/gin/internal/bytesconv" "github.com/mattn/go-isatty" ) @@ -265,7 +265,9 @@ func LoggerWithConfig(conf LoggerConfig) HandlerFunc { param.Path = path - out.Write(bytesconv.StringToBytes(formatter(param))) + if _, err := out.Write(bytesconv.StringToBytes(formatter(param))); err != nil { + fmt.Println(err) + } } } } From 6040638a2649afa585d4ad55fd68f89afe00a47a Mon Sep 17 00:00:00 2001 From: mstmdev Date: Fri, 25 Mar 2022 16:59:19 +0800 Subject: [PATCH 3/5] Add test for logger --- logger.go | 6 ++---- logger_test.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/logger.go b/logger.go index 67ca6399..bdf158c8 100644 --- a/logger.go +++ b/logger.go @@ -38,7 +38,7 @@ var consoleColorMode = autoColor // LoggerConfig defines the config for Logger middleware. type LoggerConfig struct { - // Optional. Default value is gin.defaultLogFormatter + // Formatter is optional, the default value is gin.defaultLogFormatter Formatter LogFormatter // Output is a writer where logs are written. @@ -265,9 +265,7 @@ func LoggerWithConfig(conf LoggerConfig) HandlerFunc { param.Path = path - if _, err := out.Write(bytesconv.StringToBytes(formatter(param))); err != nil { - fmt.Println(err) - } + out.Write(bytesconv.StringToBytes(formatter(param))) } } } diff --git a/logger_test.go b/logger_test.go index da1b654e..8d1beebe 100644 --- a/logger_test.go +++ b/logger_test.go @@ -147,6 +147,15 @@ func TestLoggerWithConfig(t *testing.T) { assert.Contains(t, buffer.String(), "/notfound") } +func TestLoggerWithConfigWriteError(t *testing.T) { + w := &mockErrWriter{} + router := New() + router.Use(LoggerWithConfig(LoggerConfig{Output: w})) + router.GET("/example", func(c *Context) {}) + PerformRequest(router, "GET", "/example?a=100") + assert.True(t, w.triggerErrorWrite) +} + func TestLoggerWithFormatter(t *testing.T) { buffer := new(bytes.Buffer) @@ -432,3 +441,12 @@ func TestForceConsoleColor(t *testing.T) { // reset console color mode. consoleColorMode = autoColor } + +type mockErrWriter struct { + triggerErrorWrite bool +} + +func (w *mockErrWriter) Write(p []byte) (n int, err error) { + w.triggerErrorWrite = true + return 0, errors.New("test error writer") +} From b2c8526d4820882484beb7d6d75f135351d393e8 Mon Sep 17 00:00:00 2001 From: mstmdev Date: Fri, 25 Mar 2022 17:45:03 +0800 Subject: [PATCH 4/5] Fix lint --- logger.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/logger.go b/logger.go index bdf158c8..e0ade01a 100644 --- a/logger.go +++ b/logger.go @@ -265,7 +265,9 @@ func LoggerWithConfig(conf LoggerConfig) HandlerFunc { param.Path = path - out.Write(bytesconv.StringToBytes(formatter(param))) + if _, err := out.Write(bytesconv.StringToBytes(formatter(param))); err != nil { + fmt.Println(err) + } } } } From 8dbee163b27a5202c73a920d79129edf179de444 Mon Sep 17 00:00:00 2001 From: mstmdev Date: Fri, 1 Jul 2022 10:47:15 +0800 Subject: [PATCH 5/5] Print the error info that write log failed in debug mode --- logger.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logger.go b/logger.go index ba6ec615..840c78a0 100644 --- a/logger.go +++ b/logger.go @@ -266,7 +266,7 @@ func LoggerWithConfig(conf LoggerConfig) HandlerFunc { param.Path = path if _, err := out.Write(bytesconv.StringToBytes(formatter(param))); err != nil { - fmt.Println(err) + debugPrintError(err) } } }