diff --git a/log/zap/core.go b/log/zap/core.go
index ee800984fb0c7c71b80226269a4b79a7cec3f230..f2b220eab78a6cd2416408385b521c743bcefb94 100644
--- a/log/zap/core.go
+++ b/log/zap/core.go
@@ -57,6 +57,11 @@ func (core *Core) getEntry(entry zapcore.Entry, fields []zapcore.Field) *log.Ent
 		fields = append(fields, core.fields...)
 	}
 
+	enc := zapcore.NewMapObjectEncoder()
+	for _, field := range fields {
+		field.AddTo(enc)
+	}
+
 	ent := &log.Entry{
 		ID:        id.GenerateNewID(),
 		Timestamp: entry.Time,
@@ -64,22 +69,18 @@ func (core *Core) getEntry(entry zapcore.Entry, fields []zapcore.Field) *log.Ent
 		Message:   entry.Message,
 	}
 
-	for _, field := range fields {
-		switch field.Key {
-		case "category":
-			ent.Category = field.String
-		case "component":
-			ent.Component = field.String
-		case "event":
-			ent.Event = field.String
-		case "object":
-			ent.ObjectID = field.Interface.(*oid.ObjectId)
-		case "caller":
-			ent.CallerID = field.Interface.(*oid.ObjectId)
-		case "attr":
-			ent.Attr = field.Interface
-		case "tags":
-			ent.Tags, _ = field.Interface.([]string)
+	ent.Category, _ = enc.Fields["category"].(string)
+	ent.Component, _ = enc.Fields["component"].(string)
+	ent.Event, _ = enc.Fields["event"].(string)
+	ent.ObjectID, _ = enc.Fields["object"].(*oid.ObjectId)
+	ent.CallerID, _ = enc.Fields["caller"].(*oid.ObjectId)
+	ent.Attr = enc.Fields["attr"]
+
+	if tags, ok := enc.Fields["tags"].([]any); ok {
+		for _, item := range tags {
+			if tag, ok := item.(string); ok {
+				ent.Tags = append(ent.Tags, tag)
+			}
 		}
 	}
 
diff --git a/log/zap/field.go b/log/zap/field.go
index 4410c967931ead64e8828ee6ea6fc918a9d916b9..acc6932d5fab8b2975d09998557e6ed41197010d 100644
--- a/log/zap/field.go
+++ b/log/zap/field.go
@@ -62,12 +62,12 @@ func Attr(attr any) zap.Field {
 	if attr == nil {
 		return zap.Skip()
 	}
-	return zap.Reflect("attr", attr)
+	return zap.Any("attr", attr)
 }
 
 func Tags(tags ...string) zap.Field {
 	if len(tags) == 0 {
 		return zap.Skip()
 	}
-	return zap.Reflect("tags", tags)
+	return zap.Strings("tags", tags)
 }
diff --git a/log/zap/field_test.go b/log/zap/field_test.go
index 491984db1cb86cb46efd4e36f177f859cd729afa..643506bac023d51b25920ae6b5a3c84d511eb342 100644
--- a/log/zap/field_test.go
+++ b/log/zap/field_test.go
@@ -173,7 +173,7 @@ func TestTags(t *testing.T) {
 		field zap.Field
 		want  zap.Field
 	}{
-		{name: "ok", field: Tags("a", "b", "c"), want: zap.Reflect("tags", []string{"a", "b", "c"})},
+		{name: "ok", field: Tags("a", "b", "c"), want: zap.Strings("tags", []string{"a", "b", "c"})},
 		{name: "invalid", field: Tags(nil...), want: zap.Skip()},
 	}