log/extra.go

148 lines
3.2 KiB
Go
Raw Normal View History

package log
import (
"reflect"
"apigo.cc/go/cast"
)
type RequestLog struct {
BaseLog
ServerId string
App string
Node string
ClientIp string
FromApp string
FromNode string
UserId string
DeviceId string
ClientAppName string
ClientAppVersion string
SessionId string
RequestId string
Host string
Scheme string
Proto string
AuthLevel int
Priority int
Method string
Path string
RequestHeaders map[string]string
RequestData map[string]any
UsedTime float32
ResponseCode int
ResponseHeaders map[string]string
ResponseDataLength uint
ResponseData string
}
func (logger *Logger) Request(entry *RequestLog) {
logger.fillBase(entry, LogTypeRequest)
logger.Log(entry)
}
type TaskLog struct {
BaseLog
Task string
UsedTime float32
Success bool
Message string
}
type MonitorLog struct {
BaseLog
Target string
Status int
Message string
}
type StatisticLog struct {
BaseLog
Category string
Item string
Value float64
}
func (logger *Logger) Task(taskName string, usedTime float32, success bool, message string, extra ...any) {
if logger.CheckLevel(INFO) {
entry := GetEntry(reflect.TypeOf(&TaskLog{})).(*TaskLog)
logger.fillBase(entry, LogTypeTask)
entry.Task = taskName
entry.UsedTime = usedTime
entry.Success = success
entry.Message = message
if len(extra) > 0 {
cast.ToMap(entry.Extra, extra)
}
logger.Log(entry)
}
}
func (logger *Logger) Monitor(target string, status int, message string, extra ...any) {
if logger.CheckLevel(INFO) {
entry := GetEntry(reflect.TypeOf(&MonitorLog{})).(*MonitorLog)
logger.fillBase(entry, LogTypeMonitor)
entry.Target = target
entry.Status = status
entry.Message = message
if len(extra) > 0 {
cast.ToMap(entry.Extra, extra)
}
logger.Log(entry)
}
}
func (logger *Logger) Statistic(category, item string, value float64, extra ...any) {
if logger.CheckLevel(INFO) {
entry := GetEntry(reflect.TypeOf(&StatisticLog{})).(*StatisticLog)
logger.fillBase(entry, LogTypeStatistic)
entry.Category = category
entry.Item = item
entry.Value = value
if len(extra) > 0 {
cast.ToMap(entry.Extra, extra)
}
logger.Log(entry)
}
}
type DBLog struct {
BaseLog
DbType string
Dsn string
Query string
QueryArgs string
UsedTime float32
Error string
CallStacks []string
}
func (logger *Logger) DB(dbType, dsn, query string, args []any, usedTime float32, err error, extra ...any) {
logType := LogTypeDb
level := INFO
var e string
if err != nil {
logType = LogTypeDbError
level = ERROR
e = err.Error()
}
if logger.CheckLevel(level) {
entry := GetEntry(reflect.TypeOf(&DBLog{})).(*DBLog)
logger.fillBase(entry, logType)
entry.DbType = dbType
entry.Dsn = dsn
entry.Query = query
entry.QueryArgs = cast.MustToJSON(args)
entry.UsedTime = usedTime
if e != "" {
entry.Error = e
entry.CallStacks = getCallStacks(logger.truncations)
}
if len(extra) > 0 {
cast.ToMap(entry.Extra, extra)
}
logger.Log(entry)
}
}