From ab1b250b0ed738f505153af51ff5975b3cbeb70d Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Thu, 21 Nov 2024 18:01:43 +0100 Subject: [PATCH] simplify de-duplication code This is a follow-up which removes several functions which don't provide enough additional value anymore. This wasn't done earlier to keep the previous commits simple. --- internal/serialize/keyvalues.go | 28 ++++------------------------ internal/serialize/keyvalues_test.go | 2 +- klog.go | 5 +++-- klogr_slog.go | 5 +++-- ktesting/testinglogger.go | 7 ++++--- textlogger/textlogger.go | 5 +++-- 6 files changed, 18 insertions(+), 34 deletions(-) diff --git a/internal/serialize/keyvalues.go b/internal/serialize/keyvalues.go index af35211a..9c3858ec 100644 --- a/internal/serialize/keyvalues.go +++ b/internal/serialize/keyvalues.go @@ -58,35 +58,15 @@ type Formatter struct { type AnyToStringFunc func(v interface{}) string -// MergeKVsInto is a variant of MergeKVs which directly formats the key/value -// pairs into a buffer. -func (f Formatter) MergeAndFormatKVs(b *bytes.Buffer, first, second []interface{}) { - f.formatKVs(b, first, second) -} - -func MergeAndFormatKVs(b *bytes.Buffer, first, second []interface{}) { - Formatter{}.MergeAndFormatKVs(b, first, second) -} - const missingValue = "(MISSING)" -// KVListFormat serializes all key/value pairs into the provided buffer. -// A space gets inserted before the first pair and between each pair. -func (f Formatter) KVListFormat(b *bytes.Buffer, keysAndValues ...interface{}) { - f.formatKVs(b, keysAndValues) -} - -func KVListFormat(b *bytes.Buffer, keysAndValues ...interface{}) { - Formatter{}.KVListFormat(b, keysAndValues...) -} - -func KVFormat(b *bytes.Buffer, k, v interface{}) { - Formatter{}.KVFormat(b, k, v) +func FormatKVs(b *bytes.Buffer, kvs ...[]interface{}) { + Formatter{}.FormatKVs(b, kvs...) } -// formatKVs formats all key/value pairs such that the output contains no +// FormatKVs formats all key/value pairs such that the output contains no // duplicates ("last one wins"). -func (f Formatter) formatKVs(b *bytes.Buffer, kvs ...[]interface{}) { +func (f Formatter) FormatKVs(b *bytes.Buffer, kvs ...[]interface{}) { // De-duplication is done by optimistically formatting all key value // pairs and then cutting out the output of those key/value pairs which // got overwritten later. diff --git a/internal/serialize/keyvalues_test.go b/internal/serialize/keyvalues_test.go index 07ac25fd..772577d2 100644 --- a/internal/serialize/keyvalues_test.go +++ b/internal/serialize/keyvalues_test.go @@ -184,7 +184,7 @@ No whitespace.`, for _, d := range testKVList { b := &bytes.Buffer{} - serialize.KVListFormat(b, d.keysValues...) + serialize.FormatKVs(b, d.keysValues) if b.String() != d.want { t.Errorf("KVListFormat error:\n got:\n\t%s\nwant:\t%s", b.String(), d.want) } diff --git a/klog.go b/klog.go index a5997e06..40b1b20b 100644 --- a/klog.go +++ b/klog.go @@ -819,10 +819,11 @@ func (l *loggingT) printS(err error, s severity.Severity, depth int, msg string, b := buffer.GetBuffer() b.Write(qMsg) + var errKV []interface{} if err != nil { - serialize.KVListFormat(&b.Buffer, "err", err) + errKV = []interface{}{"err", err} } - serialize.KVListFormat(&b.Buffer, keysAndValues...) + serialize.FormatKVs(&b.Buffer, errKV, keysAndValues) l.printDepth(s, nil, nil, depth+1, &b.Buffer) // Make the buffer available for reuse. buffer.PutBuffer(b) diff --git a/klogr_slog.go b/klogr_slog.go index 0010e934..901e28dd 100644 --- a/klogr_slog.go +++ b/klogr_slog.go @@ -69,10 +69,11 @@ func slogOutput(file string, line int, now time.Time, err error, s severity.Seve b := buffer.GetBuffer() b.Write(qMsg) + var errKV []interface{} if err != nil { - serialize.KVListFormat(&b.Buffer, "err", err) + errKV = []interface{}{"err", err} } - serialize.KVListFormat(&b.Buffer, kvList...) + serialize.FormatKVs(&b.Buffer, errKV, kvList) // See print + header. buf := logging.formatHeader(s, file, line, now) diff --git a/ktesting/testinglogger.go b/ktesting/testinglogger.go index b6c7bb2e..31569357 100644 --- a/ktesting/testinglogger.go +++ b/ktesting/testinglogger.go @@ -302,7 +302,7 @@ func (l tlogger) Info(level int, msg string, kvList ...interface{}) { l.shared.t.Helper() buf := buffer.GetBuffer() - l.shared.formatter.MergeAndFormatKVs(&buf.Buffer, l.values, kvList) + l.shared.formatter.FormatKVs(&buf.Buffer, l.values, kvList) l.log(LogInfo, msg, level, buf, nil, kvList) } @@ -320,10 +320,11 @@ func (l tlogger) Error(err error, msg string, kvList ...interface{}) { l.shared.t.Helper() buf := buffer.GetBuffer() + var errKV []interface{} if err != nil { - l.shared.formatter.KVFormat(&buf.Buffer, "err", err) + errKV = []interface{}{"err", err} } - l.shared.formatter.MergeAndFormatKVs(&buf.Buffer, l.values, kvList) + l.shared.formatter.FormatKVs(&buf.Buffer, errKV, l.values, kvList) l.log(LogError, msg, 0, buf, err, kvList) } diff --git a/textlogger/textlogger.go b/textlogger/textlogger.go index 7aaad6a2..6b9aab86 100644 --- a/textlogger/textlogger.go +++ b/textlogger/textlogger.go @@ -132,10 +132,11 @@ func (l *tlogger) printWithInfos(file string, line int, now time.Time, err error b.Write(qMsg) + var errKV []interface{} if err != nil { - serialize.KVFormat(&b.Buffer, "err", err) + errKV = []interface{}{"err", err} } - serialize.MergeAndFormatKVs(&b.Buffer, l.values, kvList) + serialize.FormatKVs(&b.Buffer, errKV, l.values, kvList) if b.Len() == 0 || b.Bytes()[b.Len()-1] != '\n' { b.WriteByte('\n') }