service/log.go

92 lines
3.0 KiB
Go
Raw Permalink Normal View History

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
}
// LogRequest 闭环式日志调用封装
func LogRequest(logger *log.Logger, fn func(entry *RequestLog)) {
if !logger.CheckLevel(log.INFO) {
return
}
entry := log.GetEntry[RequestLog]()
logger.FillBase(entry.GetBaseLog(), log.LogTypeRequest)
// 执行业务赋值逻辑
fn(entry)
// 统一发送
logger.Log(entry)
}
func init() {
log.RegisterType(log.LogTypeRequest, &RequestLog{})
}