2026-05-09 16:39:20 +08:00
|
|
|
package service
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"apigo.cc/go/log"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type RequestLog struct {
|
|
|
|
|
log.BaseLog
|
|
|
|
|
ServerId string `log:"pos:6,hide:true"`
|
|
|
|
|
App string `log:"pos:7,color:cyan,keyname:App"`
|
|
|
|
|
Node string `log:"pos:8,color:gray,attachBefore:true"`
|
|
|
|
|
FromApp string `log:"pos:9,color:cyan,keyname:From"`
|
|
|
|
|
FromNode string `log:"pos:10,color:gray,attachBefore:true"`
|
|
|
|
|
ClientIp string `log:"pos:11,withoutkey:true"`
|
|
|
|
|
ClientAppName string `log:"pos:12,attachBefore:true,keyname:Client"`
|
|
|
|
|
ClientAppVersion string `log:"pos:13,attachBefore:true"`
|
|
|
|
|
UserId string `log:"pos:14,color:magenta,keyname:User"`
|
|
|
|
|
DeviceId string `log:"pos:15,color:gray,keyname:Device"`
|
|
|
|
|
SessionId string `log:"pos:16,keyname:Session"`
|
|
|
|
|
Host string `log:"pos:17,color:gray,withoutkey:true"`
|
|
|
|
|
Method string `log:"pos:18,color:gray,withoutkey:true"`
|
|
|
|
|
Path string `log:"pos:19,color:cyan,withoutkey:true"`
|
|
|
|
|
Scheme string `log:"pos:20,color:gray,withoutkey:true"`
|
|
|
|
|
Proto string `log:"pos:21,color:gray,withoutkey:true"`
|
|
|
|
|
AuthLevel int `log:"pos:22,color:green"`
|
|
|
|
|
Priority int `log:"pos:23,hide:true"`
|
|
|
|
|
RequestData any `log:"pos:24,color:cyan,keyname:Request"`
|
|
|
|
|
RequestHeaders map[string]string `log:"pos:25,color:cyan,keyname:Headers"`
|
|
|
|
|
UsedTime float32 `log:"pos:26,color:green,precision:6"`
|
|
|
|
|
ResponseCode int `log:"pos:27,color:magenta,keyname:Status"`
|
|
|
|
|
ResponseDataLength uint `log:"pos:28,color:magenta,keyname:ContentLength"`
|
|
|
|
|
ResponseData any `log:"pos:29,color:magenta,keyname:Response"`
|
|
|
|
|
ResponseHeaders map[string]string `log:"pos:30,color:magenta,keyname:Headers"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (l *RequestLog) Reset() {
|
|
|
|
|
l.BaseLog.Reset()
|
|
|
|
|
l.ServerId = ""
|
|
|
|
|
l.App = ""
|
|
|
|
|
l.Node = ""
|
|
|
|
|
l.ClientIp = ""
|
|
|
|
|
l.FromApp = ""
|
|
|
|
|
l.FromNode = ""
|
|
|
|
|
l.UserId = ""
|
|
|
|
|
l.DeviceId = ""
|
|
|
|
|
l.ClientAppName = ""
|
|
|
|
|
l.ClientAppVersion = ""
|
|
|
|
|
l.SessionId = ""
|
|
|
|
|
l.Host = ""
|
|
|
|
|
l.Scheme = ""
|
|
|
|
|
l.Proto = ""
|
|
|
|
|
l.AuthLevel = 0
|
|
|
|
|
l.Priority = 0
|
|
|
|
|
l.Method = ""
|
|
|
|
|
l.Path = ""
|
|
|
|
|
if l.RequestHeaders == nil {
|
|
|
|
|
l.RequestHeaders = make(map[string]string, 8)
|
|
|
|
|
} else {
|
|
|
|
|
clear(l.RequestHeaders)
|
|
|
|
|
}
|
|
|
|
|
l.RequestData = nil
|
|
|
|
|
l.UsedTime = 0
|
|
|
|
|
l.ResponseCode = 0
|
|
|
|
|
if l.ResponseHeaders == nil {
|
|
|
|
|
l.ResponseHeaders = make(map[string]string, 8)
|
|
|
|
|
} else {
|
|
|
|
|
clear(l.ResponseHeaders)
|
|
|
|
|
}
|
|
|
|
|
l.ResponseDataLength = 0
|
|
|
|
|
l.ResponseData = nil
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-10 22:40:31 +08:00
|
|
|
// LogRequest 闭环式日志调用封装
|
|
|
|
|
func LogRequest(logger *log.Logger, fn func(entry *RequestLog)) {
|
2026-05-09 16:39:20 +08:00
|
|
|
if !logger.CheckLevel(log.INFO) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
entry := log.GetEntry[RequestLog]()
|
|
|
|
|
logger.FillBase(entry.GetBaseLog(), log.LogTypeRequest)
|
|
|
|
|
|
2026-05-10 22:40:31 +08:00
|
|
|
// 执行业务赋值逻辑
|
|
|
|
|
fn(entry)
|
2026-05-09 16:39:20 +08:00
|
|
|
|
2026-05-10 22:40:31 +08:00
|
|
|
// 统一发送
|
2026-05-09 16:39:20 +08:00
|
|
|
logger.Log(entry)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
log.RegisterType(log.LogTypeRequest, &RequestLog{})
|
|
|
|
|
}
|