日志框架logrus(一)
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"net/http"
"os"
)
var log = logrus.New()
func initLogrus() error {
log.Formatter = &logrus.JSONFormatter{}
file, err := os.OpenFile("./gin_log.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println("创建文件/打开文件失败!")
return err
}
log.Out = file
gin.SetMode(gin.ReleaseMode)
gin.DefaultWriter = log.Out
log.Level = logrus.InfoLevel
return nil
}
func main() {
err := initLogrus()
if err != nil {
fmt.Println(err)
return
}
r := gin.Default()
r.GET("/logrus", func(context *gin.Context) {
log.WithFields(logrus.Fields{
"url": context.Request.RequestURI,
"method": context.Request.Method,
"params": context.Query("name"),
"IP": context.ClientIP(),
}).Info()
resData := struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}{http.StatusOK, "响应成功", "OK"}
context.JSON(http.StatusOK, resData)
})
r.Run(":9090")
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d94912b5300b430c9cdbbc49587fa527.png)
日志框架logrus(二)
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/lestrrat-go/file-rotatelogs"
"github.com/rifflock/lfshook"
"github.com/sirupsen/logrus"
"net/http"
"os"
"path"
"time"
)
var (
logFilePath = "./"
logFileName = "system.log"
)
func main() {
r := gin.Default()
r.Use(logMiddleware())
r.GET("/logrus", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "响应成功",
"data": "OK",
})
})
r.Run(":9090")
}
func logMiddleware() gin.HandlerFunc {
fileName := path.Join(logFilePath, logFileName)
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println(err)
}
logger := logrus.New()
logger.SetLevel(logrus.DebugLevel)
logger.Out = file
logWriter, err := rotatelogs.New(
fileName+".%Y%m%d.log",
rotatelogs.WithLinkName(fileName),
rotatelogs.WithMaxAge(7*24*time.Hour),
rotatelogs.WithRotationTime(1*time.Hour))
writerMap := lfshook.WriterMap{
logrus.InfoLevel: logWriter,
logrus.FatalLevel: logWriter,
logrus.DebugLevel: logWriter,
logrus.WarnLevel: logWriter,
logrus.ErrorLevel: logWriter,
logrus.PanicLevel: logWriter,
}
logger.AddHook(lfshook.NewHook(writerMap, &logrus.JSONFormatter{
TimestampFormat: "2024-05-06 15:49:50",
}))
return func(context *gin.Context) {
context.Next()
method := context.Request.Method
uri := context.Request.RequestURI
code := context.Writer.Status()
ip := context.ClientIP()
logger.WithFields(logrus.Fields{
"code": code,
"ip": ip,
"method": method,
"uri": uri,
}).Info()
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8bfb59a345bf4f3baca24245b9cf92ab.png)