diff --git a/logger/unwrap/unwrap.go b/logger/unwrap/unwrap.go index 16f6b41d..7659eb40 100644 --- a/logger/unwrap/unwrap.go +++ b/logger/unwrap/unwrap.go @@ -353,6 +353,7 @@ func (f *unwrap) format(v reflect.Value) { f.depth++ vt := v.Type() prevSkip := false + for i := 0; i < numFields; i++ { sv, ok := vt.Field(i).Tag.Lookup("logger") if ok { @@ -367,13 +368,16 @@ func (f *unwrap) format(v reflect.Value) { prevSkip = true continue } - if i > 0 && !prevSkip { - _, _ = f.s.Write(commaBytes) - _, _ = f.s.Write(spaceBytes) - } + if prevSkip { prevSkip = false } + + if numWritten > 0 { + _, _ = f.s.Write(commaBytes) + _, _ = f.s.Write(spaceBytes) + } + vtf := vt.Field(i) if f.s.Flag('+') || f.s.Flag('#') { _, _ = f.s.Write([]byte(vtf.Name)) diff --git a/logger/unwrap/unwrap_test.go b/logger/unwrap/unwrap_test.go index 5c0ccd49..3161c342 100644 --- a/logger/unwrap/unwrap_test.go +++ b/logger/unwrap/unwrap_test.go @@ -86,12 +86,12 @@ func TestTaggedNested(t *testing.T) { unk string } type str struct { - val *val `logger:"take"` key string `logger:"omit"` + val *val `logger:"take"` } var iface interface{} - v := &str{key: "omit", val: &val{key: "test", val: "omit", unk: "unk"}} + v := &str{val: &val{key: "test", unk: "unk"}} iface = v buf := fmt.Sprintf("%#v", Unwrap(iface, Tagged(true))) if strings.Compare(buf, `&unwrap.str{val:(*unwrap.val){key:"test"}}`) != 0 {