logger/unwrap: intergate omit functionality #150
@ -168,9 +168,7 @@ func (f *unwrap) formatPtr(v reflect.Value) {
|
|||||||
} else {
|
} else {
|
||||||
_, _ = f.s.Write(bytes.Repeat(ampBytes, indirects))
|
_, _ = f.s.Write(bytes.Repeat(ampBytes, indirects))
|
||||||
}
|
}
|
||||||
|
|
||||||
_, _ = f.s.Write([]byte(ve.Type().String()))
|
_, _ = f.s.Write([]byte(ve.Type().String()))
|
||||||
|
|
||||||
if f.depth > 0 {
|
if f.depth > 0 {
|
||||||
_, _ = f.s.Write(closeParenBytes)
|
_, _ = f.s.Write(closeParenBytes)
|
||||||
}
|
}
|
||||||
@ -238,11 +236,19 @@ func (f *unwrap) format(v reflect.Value) {
|
|||||||
|
|
||||||
// get type information unless already handled elsewhere.
|
// get type information unless already handled elsewhere.
|
||||||
if !f.ignoreNextType && f.s.Flag('#') {
|
if !f.ignoreNextType && f.s.Flag('#') {
|
||||||
if v.Type().Kind() != reflect.Map {
|
if v.Type().Kind() != reflect.Map &&
|
||||||
|
v.Type().Kind() != reflect.String &&
|
||||||
|
v.Type().Kind() != reflect.Array &&
|
||||||
|
v.Type().Kind() != reflect.Slice {
|
||||||
_, _ = f.s.Write(openParenBytes)
|
_, _ = f.s.Write(openParenBytes)
|
||||||
}
|
}
|
||||||
|
if v.Kind() != reflect.String {
|
||||||
_, _ = f.s.Write([]byte(v.Type().String()))
|
_, _ = f.s.Write([]byte(v.Type().String()))
|
||||||
if v.Type().Kind() != reflect.Map {
|
}
|
||||||
|
if v.Type().Kind() != reflect.Map &&
|
||||||
|
v.Type().Kind() != reflect.String &&
|
||||||
|
v.Type().Kind() != reflect.Array &&
|
||||||
|
v.Type().Kind() != reflect.Slice {
|
||||||
_, _ = f.s.Write(closeParenBytes)
|
_, _ = f.s.Write(closeParenBytes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,18 +288,19 @@ func (f *unwrap) format(v reflect.Value) {
|
|||||||
}
|
}
|
||||||
fallthrough
|
fallthrough
|
||||||
case reflect.Array:
|
case reflect.Array:
|
||||||
_, _ = f.s.Write(openBracketBytes)
|
_, _ = f.s.Write(openBraceBytes)
|
||||||
f.depth++
|
f.depth++
|
||||||
numEntries := v.Len()
|
numEntries := v.Len()
|
||||||
for i := 0; i < numEntries; i++ {
|
for i := 0; i < numEntries; i++ {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
|
_, _ = f.s.Write(commaBytes)
|
||||||
_, _ = f.s.Write(spaceBytes)
|
_, _ = f.s.Write(spaceBytes)
|
||||||
}
|
}
|
||||||
f.ignoreNextType = true
|
f.ignoreNextType = true
|
||||||
f.format(f.unpackValue(v.Index(i)))
|
f.format(f.unpackValue(v.Index(i)))
|
||||||
}
|
}
|
||||||
f.depth--
|
f.depth--
|
||||||
_, _ = f.s.Write(closeBracketBytes)
|
_, _ = f.s.Write(closeBraceBytes)
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
_, _ = f.s.Write([]byte(`"` + v.String() + `"`))
|
_, _ = f.s.Write([]byte(`"` + v.String() + `"`))
|
||||||
case reflect.Interface:
|
case reflect.Interface:
|
||||||
@ -331,11 +338,20 @@ func (f *unwrap) format(v reflect.Value) {
|
|||||||
_, _ = f.s.Write(openBraceBytes)
|
_, _ = f.s.Write(openBraceBytes)
|
||||||
f.depth++
|
f.depth++
|
||||||
vt := v.Type()
|
vt := v.Type()
|
||||||
|
prevSkip := false
|
||||||
for i := 0; i < numFields; i++ {
|
for i := 0; i < numFields; i++ {
|
||||||
if i > 0 {
|
sv, ok := vt.Field(i).Tag.Lookup("logger")
|
||||||
|
if ok && sv == "omit" {
|
||||||
|
prevSkip = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if i > 0 && !prevSkip {
|
||||||
_, _ = f.s.Write(commaBytes)
|
_, _ = f.s.Write(commaBytes)
|
||||||
_, _ = f.s.Write(spaceBytes)
|
_, _ = f.s.Write(spaceBytes)
|
||||||
}
|
}
|
||||||
|
if prevSkip {
|
||||||
|
prevSkip = false
|
||||||
|
}
|
||||||
vtf := vt.Field(i)
|
vtf := vt.Field(i)
|
||||||
if f.s.Flag('+') || f.s.Flag('#') {
|
if f.s.Flag('+') || f.s.Flag('#') {
|
||||||
_, _ = f.s.Write([]byte(vtf.Name))
|
_, _ = f.s.Write([]byte(vtf.Name))
|
||||||
|
@ -6,6 +6,19 @@ import (
|
|||||||
"go.unistack.org/micro/v3/codec"
|
"go.unistack.org/micro/v3/codec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestUnwrapOmit(t *testing.T) {
|
||||||
|
type val struct {
|
||||||
|
MP map[string]string `json:"mp" logger:"omit"`
|
||||||
|
STR string `json:"str"`
|
||||||
|
AR []string `json:"ar"`
|
||||||
|
}
|
||||||
|
|
||||||
|
v1 := &val{AR: []string{"string1", "string2"}, STR: "string", MP: map[string]string{"key": "val"}}
|
||||||
|
|
||||||
|
t.Logf("output: %#v", v1)
|
||||||
|
t.Logf("output: %#v", Unwrap(v1))
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnwrap(t *testing.T) {
|
func TestUnwrap(t *testing.T) {
|
||||||
string1 := "string1"
|
string1 := "string1"
|
||||||
string2 := "string2"
|
string2 := "string2"
|
||||||
|
Loading…
Reference in New Issue
Block a user