Browse Source

事件增加调试日志

pull/1/head
Sydonian 2 years ago
parent
commit
f985922287
2 changed files with 55 additions and 29 deletions
  1. +39
    -27
      pkg/logger/logger_test.go
  2. +16
    -2
      pkg/logger/utils.go

+ 39
- 27
pkg/logger/logger_test.go View File

@@ -8,32 +8,44 @@ import (
) )


func Test_FormatStruct(t *testing.T) { func Test_FormatStruct(t *testing.T) {
Convey("检查输出格式", t, func() {

type Struct2 struct {
Int int
}

type Struct struct {
Arr []int
NilArr []int
FixedArr [5]int
St2 Struct2
St2Ptr *Struct2
NilSt2Ptr *Struct2
}

So(fmt.Sprintf("%v", FormatStruct(Struct{
Arr: []int{1, 2, 3, 4},
NilArr: nil,
FixedArr: [5]int{1, 2, 3, 4, 5},
St2: Struct2{
Int: 123,
},
St2Ptr: &Struct2{
Int: 456,
},
NilSt2Ptr: nil,
})), ShouldEqual, "len(Arr): 4, len(NilArr): 0, len(FixedArr): 5, St2: <Struct2>, St2Ptr: &<Struct2>, NilSt2Ptr: <nil>")
type Struct2 struct {
Int int
}

type Struct struct {
Arr []int
NilArr []int
FixedArr [5]int
St2 Struct2
St2Ptr *Struct2
NilSt2Ptr *Struct2
}

st := Struct{
Arr: []int{1, 2, 3, 4},
NilArr: nil,
FixedArr: [5]int{1, 2, 3, 4, 5},
St2: Struct2{
Int: 123,
},
St2Ptr: &Struct2{
Int: 456,
},
NilSt2Ptr: nil,
}

fmtedStr := "len(Arr): 4, len(NilArr): 0, len(FixedArr): 5, St2: <Struct2>, St2Ptr: &<Struct2>, NilSt2Ptr: <nil>"

Convey("基本格式", t, func() {
So(fmt.Sprintf("%v", FormatStruct(st)), ShouldEqual, fmtedStr)
})

Convey("指针", t, func() {
So(fmt.Sprintf("%v", FormatStruct(&st)), ShouldEqual, fmtedStr)
})

Convey("interface", t, func() {
var ift any = st
So(fmt.Sprintf("%v", FormatStruct(ift)), ShouldEqual, fmtedStr)
}) })
} }

+ 16
- 2
pkg/logger/utils.go View File

@@ -16,10 +16,20 @@ func (f *structFormatter) String() string {


kind := typ.Kind() kind := typ.Kind()


if kind != reflect.Struct {
return fmt.Sprintf("%v", f.val)
if kind == reflect.Struct {
return f.structString(val)
} }


if kind == reflect.Pointer {
return f.structString(val.Elem())
}

return fmt.Sprintf("%v", f.val)
}

func (f *structFormatter) structString(val reflect.Value) string {
typ := val.Type()

strBuilder := strings.Builder{} strBuilder := strings.Builder{}
for i := 0; i < val.NumField(); i++ { for i := 0; i < val.NumField(); i++ {
fieldInfo := typ.Field(i) fieldInfo := typ.Field(i)
@@ -76,6 +86,10 @@ func (f *structFormatter) String() string {
return strBuilder.String() return strBuilder.String()
} }


// FormatStruct 输出结构体的内容。
// 1. 数组类型只会输出长度
// 2. 内部的结构体的内容不会再输出
// 3. 支持参数是一层的指针
func FormatStruct(val any) any { func FormatStruct(val any) any {
return &structFormatter{ return &structFormatter{
val: val, val: val,


Loading…
Cancel
Save