日志文件的写入
```go package main
import ( “io” “os”
"github.com/gin-gonic/gin"
)
func main() { gin.DisableConsoleColor()
// Logging to a file.f, _ := os.Create("gin.log")gin.DefaultWriter = io.MultiWriter(f)// 如果需要同时将日志写入文件和控制台,请使用以下代码。// gin.DefaultWriter = io.MultiWriter(f, os.Stdout)r := gin.Default()r.GET("/ping", func(c *gin.Context) {c.String(200, "pong")})r.Run()
}
> > <a name="e82839e8"></a>#### 日志分割> ```gopackage mainimport ("fmt""github.com/gin-gonic/gin"rotatelogs "github.com/lestrrat-go/file-rotatelogs""github.com/rifflock/lfshook""github.com/sirupsen/logrus""os""path""time")var (//日志地址logFilePath = "./"//日志文件名logFileName = "system.log")func logerMiddleware() gin.HandlerFunc {// 日志文件fileName := path.Join(logFilePath, logFileName)// 写入文件src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend)if err != nil {fmt.Println("err", err)}// 实例化logger := logrus.New()//设置日志级别logger.SetLevel(logrus.DebugLevel)//设置输出logger.Out = src// 设置 rotatelogslogWriter, err := rotatelogs.New(// 分割后的文件名称fileName+".%Y%m%d.log",// 生成软链,指向最新日志文件rotatelogs.WithLinkName(fileName),// 设置最大保存时间(7天)rotatelogs.WithMaxAge(7*24*time.Hour),// 设置日志切割时间间隔(1天)rotatelogs.WithRotationTime(24*time.Hour),)writeMap := lfshook.WriterMap{logrus.InfoLevel: logWriter,logrus.FatalLevel: logWriter,logrus.DebugLevel: logWriter,logrus.WarnLevel: logWriter,logrus.ErrorLevel: logWriter,logrus.PanicLevel: logWriter,}logger.AddHook(lfshook.NewHook(writeMap, &logrus.JSONFormatter{TimestampFormat: "2006-01-02 15:04:05",}))return func(c *gin.Context) {//开始时间startTime := time.Now()//处理请求c.Next()//结束时间endTime := time.Now()// 执行时间latencyTime := endTime.Sub(startTime)//请求方式reqMethod := c.Request.Method//请求路由reqUrl := c.Request.RequestURI//状态码statusCode := c.Writer.Status()//请求ipclientIP := c.ClientIP()// 日志格式logger.WithFields(logrus.Fields{"status_code": statusCode,"latency_time": latencyTime,"client_ip": clientIP,"req_method": reqMethod,"req_uri": reqUrl,}).Info()}}func main() {//禁用控制台颜色gin.DisableConsoleColor()// Logging to a file.// 如果需要同时将日志写入文件和控制台,请使用以下代码。r := gin.Default()r.Use(logerMiddleware())r.GET("/ping", func(c *gin.Context) {c.String(200, "pong")})r.Run()}
