优化日志

This commit is contained in:
hahwu 2026-04-03 11:02:33 +08:00
parent 16bfd16d64
commit b88272d00d
2 changed files with 73 additions and 2 deletions

View File

@ -16,6 +16,7 @@ import (
"gitea.bywaystudios.com/pet_home/leaf/log"
"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/proto"
"server/db"
@ -111,8 +112,12 @@ func HandleClientReq(args []interface{}) {
case "ReqAdminInfo": // 后台接口
AdminProcess(m.GetFunc(), []interface{}{a, buf})
case "ReqLoginCode":
Detail := &msg.ReqLoginCode{}
proto.Unmarshal(buf, Detail)
detailMsg, err := UnmarshalProtoMessageByName(m.GetFunc(), buf)
if err != nil {
log.Error("unmarshal %s failed: %v", m.GetFunc(), err)
return
}
Detail := detailMsg.(*msg.ReqLoginCode)
Code, err := GeneratedCode(Detail.TelPhone)
ResLoginCode := &msg.ResLoginCode{}
if err != nil {
@ -237,10 +242,13 @@ func HandleClientReq(args []interface{}) {
p.(*Player).Recover(backup) //还原Player的数据
return
}
detailMsg, err := UnmarshalProtoMessageByName(m.GetFunc(), buf)
str, _ := protojson.Marshal(detailMsg)
p.(*Player).ProcessTrigger()
p.(*Player).TeLog("func_exec_time", map[string]interface{}{
"method_name": m.GetFunc(),
"exec_time": fmt.Sprintf("%v", time.Since(start)),
"proto": string(str),
})
}
}

View File

@ -0,0 +1,63 @@
package game
import (
"fmt"
"sync"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"
)
var (
protoMessageTypeCacheOnce sync.Once
protoMessageTypeByName sync.Map
)
func buildProtoMessageTypeCache() {
protoregistry.GlobalTypes.RangeMessages(func(messageType protoreflect.MessageType) bool {
descriptor := messageType.Descriptor()
protoMessageTypeByName.Store(string(descriptor.FullName()), messageType)
shortName := string(descriptor.Name())
if _, exists := protoMessageTypeByName.Load(shortName); !exists {
protoMessageTypeByName.Store(shortName, messageType)
}
return true
})
}
func FindProtoMessageTypeByName(name string) (protoreflect.MessageType, error) {
messageType, err := protoregistry.GlobalTypes.FindMessageByName(protoreflect.FullName(name))
if err == nil {
return messageType, nil
}
protoMessageTypeCacheOnce.Do(buildProtoMessageTypeCache)
if cachedType, ok := protoMessageTypeByName.Load(name); ok {
return cachedType.(protoreflect.MessageType), nil
}
return nil, fmt.Errorf("protobuf message type not found: %s", name)
}
func NewProtoMessageByName(name string) (proto.Message, error) {
messageType, err := FindProtoMessageTypeByName(name)
if err != nil {
return nil, err
}
return messageType.New().Interface(), nil
}
func UnmarshalProtoMessageByName(name string, data []byte) (proto.Message, error) {
message, err := NewProtoMessageByName(name)
if err != nil {
return nil, err
}
if err := proto.Unmarshal(data, message); err != nil {
return nil, err
}
return message, nil
}