From 174291a3c8e7133767d3f5b84b6e825b023d5262 Mon Sep 17 00:00:00 2001 From: Deng Ming Date: Sun, 17 Apr 2022 18:23:40 +0800 Subject: [PATCH] fix 4911: make the argument work --- CHANGELOG.md | 1 + client/httplib/httpclient.go | 2 +- core/logs/formatter.go | 4 +++- core/logs/formatter_test.go | 45 ++++++++++++++++++++++++++---------- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb395cdd..a0ce04e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - [upgrade redisgo to v1.8.8](https://github.com/beego/beego/pull/4872) - [fix prometheus CVE-2022-21698](https://github.com/beego/beego/pull/4878) - [upgrade to Go 1.18](https://github.com/beego/beego/pull/4896) +- [make `PatternLogFormatter` handling the arguments](https://github.com/beego/beego/pull/4914/files) - [Add httplib OpenTelemetry Filter](https://github.com/beego/beego/pull/4888) - [Support NewBeegoRequestWithCtx in httplib](https://github.com/beego/beego/pull/4895) diff --git a/client/httplib/httpclient.go b/client/httplib/httpclient.go index c2a61fcf..524f8bbb 100644 --- a/client/httplib/httpclient.go +++ b/client/httplib/httpclient.go @@ -51,7 +51,7 @@ type HTTPStatusCarrier interface { SetStatusCode(status int) } -// HttpHeaderCarrier If value implement HttpHeaderCarrier. http.Response.Header will pass to SetHeader +// HTTPHeadersCarrier If value implement HttpHeaderCarrier. http.Response.Header will pass to SetHeader type HTTPHeadersCarrier interface { SetHeader(header map[string][]string) } diff --git a/core/logs/formatter.go b/core/logs/formatter.go index 6e9a5bd8..6fa4f70c 100644 --- a/core/logs/formatter.go +++ b/core/logs/formatter.go @@ -15,6 +15,7 @@ package logs import ( + "fmt" "path" "strconv" ) @@ -64,9 +65,10 @@ func GetFormatter(name string) (LogFormatter, bool) { // 'l' level number, 't' prefix of level type, 'T' full name of level type func (p *PatternLogFormatter) ToString(lm *LogMsg) string { s := []rune(p.Pattern) + msg := fmt.Sprintf(lm.Msg, lm.Args...) m := map[rune]string{ 'w': lm.When.Format(p.getWhenFormatter()), - 'm': lm.Msg, + 'm': msg, 'n': strconv.Itoa(lm.LineNumber), 'l': strconv.Itoa(lm.Level), 't': levelPrefix[lm.Level], diff --git a/core/logs/formatter_test.go b/core/logs/formatter_test.go index a1853d72..71ad158f 100644 --- a/core/logs/formatter_test.go +++ b/core/logs/formatter_test.go @@ -17,7 +17,6 @@ package logs import ( "encoding/json" "errors" - "strconv" "testing" "time" @@ -79,17 +78,39 @@ func TestPatternLogFormatter(t *testing.T) { WhenFormat: "2006-01-02", } when := time.Now() - lm := &LogMsg{ - Msg: "message", - FilePath: "/User/go/beego/main.go", - Level: LevelWarn, - LineNumber: 10, - When: when, + testCases := []struct { + msg *LogMsg + want string + }{ + { + msg: &LogMsg{ + Msg: "hello %s", + FilePath: "/User/go/beego/main.go", + Level: LevelWarn, + LineNumber: 10, + When: when, + Args: []interface{}{"world"}, + }, + want: "/User/go/beego/main.go:10|2022-04-17[W]>> hello world", + }, + { + msg: &LogMsg{ + Msg: "hello", + FilePath: "/User/go/beego/main.go", + Level: LevelWarn, + LineNumber: 10, + When: when, + }, + want: "/User/go/beego/main.go:10|2022-04-17[W]>> hello", + }, + { + msg: &LogMsg{}, + want: ":0|0001-01-01[M]>> ", + }, } - got := tes.ToString(lm) - want := lm.FilePath + ":" + strconv.Itoa(lm.LineNumber) + "|" + - when.Format(tes.WhenFormat) + levelPrefix[lm.Level] + ">> " + lm.Msg - if got != want { - t.Errorf("want %s, got %s", want, got) + + for _, tc := range testCases { + got := tes.ToString(tc.msg) + assert.Equal(t, tc.want, got) } }