in filter/accesslog/filter.go [128:177]
func (f *Filter) buildAccessLogData(_ protocol.Invoker, invocation protocol.Invocation) map[string]string {
dataMap := make(map[string]string, 16)
attachments := invocation.Attachments()
itf := attachments[constant.InterfaceKey]
if itf == nil || len(itf.(string)) == 0 {
itf = attachments[constant.PathKey]
}
if itf != nil {
dataMap[constant.InterfaceKey] = itf.(string)
}
if v, ok := attachments[constant.MethodKey]; ok && v != nil {
dataMap[constant.MethodKey] = v.(string)
}
if v, ok := attachments[constant.VersionKey]; ok && v != nil {
dataMap[constant.VersionKey] = v.(string)
}
if v, ok := attachments[constant.GroupKey]; ok && v != nil {
dataMap[constant.GroupKey] = v.(string)
}
if v, ok := attachments[constant.TimestampKey]; ok && v != nil {
dataMap[constant.TimestampKey] = v.(string)
}
if v, ok := attachments[constant.LocalAddr]; ok && v != nil {
dataMap[constant.LocalAddr] = v.(string)
}
if v, ok := attachments[constant.RemoteAddr]; ok && v != nil {
dataMap[constant.RemoteAddr] = v.(string)
}
if len(invocation.Arguments()) > 0 {
builder := strings.Builder{}
// todo(after the paramTypes were set to the invocation. we should change this implementation)
typeBuilder := strings.Builder{}
builder.WriteString(reflect.ValueOf(invocation.Arguments()[0]).String())
typeBuilder.WriteString(reflect.TypeOf(invocation.Arguments()[0]).Name())
for idx := 1; idx < len(invocation.Arguments()); idx++ {
arg := invocation.Arguments()[idx]
builder.WriteString(",")
builder.WriteString(reflect.ValueOf(arg).String())
typeBuilder.WriteString(",")
typeBuilder.WriteString(reflect.TypeOf(arg).Name())
}
dataMap[Arguments] = builder.String()
dataMap[Types] = typeBuilder.String()
}
return dataMap
}