You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
1.9 KiB
83 lines
1.9 KiB
package Middleware
|
|
|
|
import (
|
|
"dsSso/Const/DefaultConst"
|
|
"dsSso/Utils/ConfigUtil"
|
|
"dsSso/Utils/SsoUtil"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/tracer0tong/kafkalogrus"
|
|
"time"
|
|
)
|
|
|
|
//转为东八区时间
|
|
type CSTFormatter struct {
|
|
logrus.Formatter
|
|
}
|
|
|
|
func (u CSTFormatter) Format(e *logrus.Entry) ([]byte, error) {
|
|
e.Time = e.Time.Local()
|
|
return u.Formatter.Format(e)
|
|
}
|
|
|
|
func init() {
|
|
var err error
|
|
var hook *kafkalogrus.KafkaLogrusHook
|
|
if hook, err = kafkalogrus.NewKafkaLogrusHook(
|
|
"kh",
|
|
logrus.AllLevels,
|
|
&logrus.JSONFormatter{},
|
|
[]string{ConfigUtil.KafkaAddress},
|
|
ConfigUtil.KafkaAccessLogTopic,
|
|
true, nil); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
//设置日志格式
|
|
logrus.SetFormatter(CSTFormatter{&logrus.JSONFormatter{}})
|
|
logrus.AddHook(hook)
|
|
}
|
|
|
|
// 日志记录到 Kafka
|
|
func LoggerToKafka() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
// 开始时间
|
|
startTime := time.Now().Local()
|
|
// 处理请求
|
|
c.Next()
|
|
// 结束时间
|
|
endTime := time.Now().Local()
|
|
// 执行时间
|
|
latencyTime := endTime.Sub(startTime)
|
|
// 请求方式
|
|
reqMethod := c.Request.Method
|
|
// 请求路由
|
|
reqUri := c.Request.RequestURI
|
|
// 状态码
|
|
statusCode := c.Writer.Status()
|
|
// 请求IP
|
|
clientIP := c.ClientIP()
|
|
|
|
//统一认证的会话id
|
|
var identityId = DefaultConst.IdentityId
|
|
var personId = DefaultConst.PersonId
|
|
var deviceId = DefaultConst.DeviceId
|
|
cookie, e := c.Request.Cookie(ConfigUtil.AccessToken)
|
|
if e == nil {
|
|
identityId, personId, deviceId = SsoUtil.AnalyzeSessionId(cookie.Value)
|
|
}
|
|
// 日志格式
|
|
logrus.WithFields(logrus.Fields{
|
|
"status_code": statusCode,
|
|
"access_time": startTime,
|
|
"latency_time": latencyTime,
|
|
"client_ip": clientIP,
|
|
"req_method": reqMethod,
|
|
"req_uri": reqUri,
|
|
"device_id": deviceId,
|
|
"identity_id": identityId,
|
|
"person_id": personId,
|
|
}).Info()
|
|
}
|
|
}
|