golang学习笔记(20)-gin日志和日志格式

gin日志和日志格式

gin日志记录方法

gin提供DefaultWriter方法经行日志记录。
官方代码

func main() {
    // 禁用控制台颜色
    gin.DisableConsoleColor()

    // 创建记录日志的文件
    f, _ := os.Create("gin.log")
    gin.DefaultWriter = io.MultiWriter(f)

    // 如果需要将日志同时写入文件和控制台,请使用以下代码
    // gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

    router := gin.Default()
    router.GET("/ping", func(c *gin.Context) {
        c.String(200, "pong")
    })

    router.Run(":8080")
}

其中直接执行,结果会写在日志,但不会在控制台输出,如果需要将日志同时写入文件和控制台。
需要在MultiWriter方法中加入方法参数os.Stdout
实验代码
只写入日志

package main

import (
	"github.com/gin-gonic/gin"
	"io"
	"os"
)

func main() {
	log, _ := os.Create("./log/gin.log")
	gin.DefaultWriter = io.MultiWriter(log)
	r := gin.Default()
	r.GET("/testLog", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"msg": "testLog",
		})
	})
	r.Run()
}

在这里插入图片描述
控制台没有信息
在这里插入图片描述
log文件中存入所有信息
控制台与log同时记录

func main() {
	log, _ := os.Create("./log/gin.log")
	gin.DefaultWriter = io.MultiWriter(log, os.Stdout)
	r := gin.Default()
	r.GET("/testLog", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"msg": "testLog",
		})
	})
	r.Run()
}

在这里插入图片描述
同时记录信息。

自定义日志

想要定义格式与规则,需要自定义日志
官方代码

func main() {
	router := gin.New()

	// LoggerWithFormatter 中间件会将日志写入 gin.DefaultWriter
	// By default gin.DefaultWriter = os.Stdout
	router.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {

		// 你的自定义格式
		return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
				param.ClientIP,
				param.TimeStamp.Format(time.RFC1123),
				param.Method,
				param.Path,
				param.Request.Proto,
				param.StatusCode,
				param.Latency,
				param.Request.UserAgent(),
				param.ErrorMessage,
		)
	}))
	router.Use(gin.Recovery())

	router.GET("/ping", func(c *gin.Context) {
		c.String(200, "pong")
	})

	router.Run(":8080")
}

在平时使用中,个人觉得gin中的日志耦合性有点强,他会添加在中间件中,不用的时候要重新开Default路由

第三方日志工具

go-logging,logrus,zap都是比较好用的第三方日志工具。
本人暂时使用logrus进行日志学习,其他日志工具后续在进行学习。


由于logrus框架应用稍显复杂,会在单独一篇博客中单独记录学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值