From e95c548c4f2d57734db3e39997735bb2bd9bfb8e Mon Sep 17 00:00:00 2001 From: Sarat Chandra Date: Fri, 8 Jul 2022 10:15:23 +0530 Subject: [PATCH 1/2] fix: Fix panic in case of default fields and odd number of fields. --- log.go | 2 +- log_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/log.go b/log.go index dd71437..c2c1795 100644 --- a/log.go +++ b/log.go @@ -195,7 +195,7 @@ func (l Logger) handleLog(msg string, lvl Level, fields ...any) { // If there are odd number of fields, ignore the last. if fieldCount%2 != 0 { - fields = fields[0 : fieldCount-1] + fields = fields[0 : len(fields)-1] } for i := range l.DefaultFields { diff --git a/log_test.go b/log_test.go index a5f1257..f4faed3 100644 --- a/log_test.go +++ b/log_test.go @@ -223,6 +223,18 @@ func TestOddNumberedFields(t *testing.T) { buf.Reset() } +func TestOddNumberedFieldsWithDefaultFields(t *testing.T) { + buf := &bytes.Buffer{} + l := New(Opts{Writer: buf, DefaultFields: []any{ + "defaultkey", "defaultval", + }}) + + // Give a odd number of fields. + l.Info("hello world", "key1", "val1", "key2") + require.Contains(t, buf.String(), `level=info message="hello world" defaultkey=defaultval key1=val1`) + buf.Reset() +} + // These test are typically meant to be run with the data race detector. func TestLoggerConcurrency(t *testing.T) { buf := &bytes.Buffer{} From ab5d82fda4461dffab1c826e721bb80a30cd8ffb Mon Sep 17 00:00:00 2001 From: Sarat Chandra Date: Fri, 8 Jul 2022 10:22:08 +0530 Subject: [PATCH 2/2] feat: Ignore odd fields passed to DefaultFields. --- log.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/log.go b/log.go index c2c1795..07c06a8 100644 --- a/log.go +++ b/log.go @@ -87,6 +87,10 @@ func New(opts Opts) Logger { opts.CallerSkipFrameCount = 3 } + if len(opts.DefaultFields)%2 != 0 { + opts.DefaultFields = opts.DefaultFields[0 : len(opts.DefaultFields)-1] + } + return Logger{ out: newSyncWriter(opts.Writer), Opts: opts,