访问日志记录器
https://github.com/sbecker/gin-api-demo/blob/master/middleware/json_logger.go
func JSONLogMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
start := time.Now()
c.Next()
duration := util.GetDurationInMillseconds(start)
entry := log.WithFields(log.Fields{
"client_ip": util.GetClientIP(c),
"duration": duration,
"method": c.Request.Method,
"path": c.Request.RequestURI,
"status": c.Writer.Status(),
"user_id": util.GetUserID(c),
"referrer": c.Request.Referer(),
"request_id": c.Writer.Header().Get("Request-Id"),
})
if c.Writer.Status() >= 500 {
entry.Error(c.Errors.String())
} else {
entry.Info("")
}
}
}
调试日志记录器
查看gin源代码,发现调试日志输出到io.Writer。重写该对象将输出重定向为JSON格式,类似于处理http.Server.Errorlog的输出方法。
func debugPrint(format string, values ...interface{}) {
if IsDebugging() {
if !strings.HasSuffix(format, "\n") {
format += "\n"
}
fmt.Fprintf(DefaultWriter, "[GIN-debug] "+format, values...)
}
}
设置调试输出,此代码未经过测试。
type WriteFunc func([]byte) (int, error)
func (fn WriteFunc) Write(data []byte) (int, error) {
return fn(data)
}
func NewLogrusWrite() io.Writer {
return WriteFunc(func(data []byte) (int, error) {
logrus.Debugf("%s", data)
return 0, nil
})
}
gin.DefaultWriter = NewLogrusWrite()
获取所有http.Server的错误日志。
htt.Server
http.Server将日志输出到log.Logger,并创建一个由指定io.Writer接收来自http.Server的错误日志的log.Logger输出。如果需要使用自定义Server的代码,请查阅gin文档以获取详细信息。
srv := &http.Server{
ErrorLog: log.New(NewLogrusWrite(), "", 0),
}