|
|
|
|
@ -26,6 +26,7 @@ package fmtr
|
|
|
|
|
import (
|
|
|
|
|
"reflect"
|
|
|
|
|
"sync"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -125,14 +126,89 @@ func AddCollector (collector FieldCollector) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func defaultCollectors () FieldCollectors {
|
|
|
|
|
return FieldCollectors{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return []FieldCollector{
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if ms,is := e.(interface { Code() string }); is {
|
|
|
|
|
b.AddFieldString(FieldNameCode, ms.Code())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if ms,is := e.(interface { Code() string }); is {
|
|
|
|
|
b.AddFieldString(FieldNameCode, ms.Code())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if ms,is := e.(interface { Message() string }); is {
|
|
|
|
|
b.AddFieldString(FieldNameMessage, ms.Message())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if in,is := e.(interface { Info () string }); is {
|
|
|
|
|
b.AddFieldString(FieldNameInfo,in.Info())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if tm,is := e.(interface { Time() time.Time }); is {
|
|
|
|
|
b.AddFieldTime(FieldNameTime, tm.Time())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if tm,is := e.(interface { Date() time.Time }); is {
|
|
|
|
|
b.AddFieldDate(FieldNameDate, tm.Date())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if tm,is := e.(interface { Param() string }); is {
|
|
|
|
|
b.AddFieldString(FieldNameParam, tm.Param())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if tm,is := e.(interface { User() string }); is {
|
|
|
|
|
b.AddFieldString(FieldNameUser, tm.User())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
CollectFieldFnc(func (b FieldBuilder, e error ) bool {
|
|
|
|
|
if tm,is := e.(interface { Source() string }); is {
|
|
|
|
|
b.AddFieldString(FieldNameSource, tm.Source())
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|