自定义日志,完全自定义
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
var (
payload []byte
)
reqMethod := c.Request.Method // 请求方式
if reqMethod != http.MethodGet {
payload, _ := io.ReadAll(c.Request.Body)
c.Request.Body = io.NopCloser(bytes.NewReader(payload))
}
startTime := time.Now() // 开始时间
c.Next() // 处理请求
endTime := time.Now() // 结束时间
latencyTime := endTime.Sub(startTime) // 执行时间
reqUri := c.Request.RequestURI // 请求方式
statusCode := c.Writer.Status() // 状态码
clientIP := c.ClientIP() // 请求真实IP
log.Log.Info("",
zap.String("method", reqMethod),
zap.String("uri", reqUri),
zap.Int("code", statusCode),
zap.Duration("latency", latencyTime),
zap.String("client_ip", clientIP),
zap.String("payload", string(payload)),
)
}
}
自定义日志,改造自带的日志
package main
import (
"HNLJ/commons"
"HNLJ/middle"
"HNLJ/route"
"fmt"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
"log"
"net"
"strings"
"time"
)
// 全局参数初始化
func init() {
config := viper.New()
config.SetConfigFile("./configs/app.toml")
if err := config.ReadInConfig(); err != nil {
log.Fatalf("读取app.toml配置文件错误, %s", err)
}
// 第一步:初始化参数
commons.InitAppParam(config)
// 第二步:初始化日志
commons.InitLog()
// 第三步:初始化mysql
dbConfig := commons.NewDbConfig(config)
dbConfig.InitDB()
}
func mylogformat(params gin.LogFormatterParams) string {
msg := fmt.Sprintf("%s [%s] %s %s\n", params.Latency , "request", params.Request.URL.String(),params.StatusCode)
return msg
}
func mylog() gin.HandlerFunc{
conf := gin.LoggerConfig{
Formatter:mylogformat,
Output:commons.Log.Out,
SkipPaths:[]string{"/commons/busi/list","/commons/news"}, // 哪些路由不记录日志
}
return gin.LoggerWithConfig(conf)
}
func main() {
gin.SetMode(gin.ReleaseMode) // 上线模式
r := gin.New()
gin.Default()
r.Use(mylog(),gin.Recovery(),middle.AllowCORS) //允许跨域
route.Route(r)
r.Run(net.JoinHostPort(commons.AppParam.ServerDomain,commons.AppParam.ServerPort))
}
gin使用Logrus
package commons
import (
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
)
var Log *logrus.Logger
func InitLog() {
logging :=logrus.New()
logging.Formatter = &logrus.TextFormatter{TimestampFormat:"2006-01-02 15:04:05.999999999"}
logging.SetOutput(&lumberjack.Logger{
Filename: AppParam.LoggerLogPath + "/server.log",
MaxSize: 500000 , // megabytes
MaxBackups: 10,
MaxAge: 10, //days
Compress: true, // disabled by default
})
Log = logging
}
import (
"os"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
)
// 全局参数初始化
func init() {
commons.NewAppParam() // 第一步:初始化参数
commons.InitLog() // 第二步:初始化日志
}
func main() {
gin.DefaultWriter = commons.Log.Out
r := gin.Default()
route.Route(r)
}