zap日志管理工具 学习日记(2)| 青训营笔记

61 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10天

项目使用

在刚结束的项目中,我使用了zap工具包等日志管理工具

zap使用示例

使用go.uber.org/zap进行日志管理,文件配置项如下:

//文件writeSyncer
    fileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{
        Filename:   "./logFile/tiktok_demo.log", //日志文件存放目录
        MaxSize:    1,                           //文件大小限制,单位MB
        MaxBackups: 5,                           //最大保留日志文件数量
        MaxAge:     30,                          //日志文件保留天数
        Compress:   false,                       //是否压缩处理
    }))

全局配置Log变量,记录两种类型的日志:DeBug、Error

  • Debug类型

程序执行时输出

userName := ctx.Query("username")
    password := ctx.Query("password")
    encodedPassword := jwt.PswEnCode(password)
    util.Log.Debug("info", zap.String("encodedPassword: ", encodedPassword))
  • Error类型:程序正常运行时,不该出现的错误

评论操作错误,数据库查询错误、类型转化错误等

// 评论失败
   if err != nil {
            c.JSON(http.StatusOK, CommentActionResponse{
                StatusCode: -1,
                StatusMsg:  "send comment failed",
            })
            util.Log.Error("CommentController-Comment_Action: return send comment failed" + err.Error()) //发表失败
            return
        }

后续优化

加糖 我们也可以给记录器加糖,加糖之后的记录器sugarLogger可以使用printf格式化输出等方法,如果用不到printf方法的话就不建议用,毕竟会损失一定的速度。

package main

import (
	"github.com/gin-gonic/gin"
	"log/logtest/utils"
	"net/http"
)

func main() {
   // 启动记录器
   logger := utils.SetupZapLogger()
   // 刷新所有缓存的条目,应该在程序结束之前使用
   defer logger.Sync()
   r := gin.Default()
   r.GET("/testLogger", func(c *gin.Context) {
      // 将访问者ip打印到日志中
      ip := utils.RemoteIp(c.Request)
      logger.Info("访问者ip",
         // 结构化上下文作为强类型字段值。
         zap.String("ip", ip),
      )
      c.JSON(http.StatusOK,"访问者ip为"+ip)
   })
   // 加糖后更符合工程学,而且加糖的消耗是非常小的,但是会拖慢执行速度
   sugar := logger.Sugar()
   r.GET("/testSugarLogger", func(c *gin.Context) {
      // 将访问者ip打印到日志中
      ip := utils.RemoteIp(c.Request)
      sugar.Infow("获取访问者ip",
         // 以结构化的上下文作为松散的键值对
         "ip", ip,
         )
      c.JSON(http.StatusOK,"访问者ip为"+ip)
   })
   r.Run(":9000")
}

加糖后松散结构的键值对显然比加糖前的强关联型键值对易用。但是会损失一定的速度,但是这个损失是很小的,就算是加糖后的记录器也要比其他的日志记录器快上4~10倍。

补充

Zap提供了强大的日志过滤功能,可以帮助开发人员更好地查找和分析应用程序的日志记录。以下是一些Zap日志过滤的常用方法:

  1. 按时间过滤:在Zap日志界面的左侧边栏中,可以选择“时间戳”选项来过滤日志。通过选择开始和结束时间,可以仅查看指定时间范围内的日志记录。
  2. 按请求方式过滤:在左侧边栏中选择“HTTP方法”选项,可以仅查看指定请求方法(例如GET、POST等)的日志记录。
  3. 按URL过滤:在左侧边栏中选择“URL”选项,可以查看包含特定URL的日志记录。
  4. 按响应代码过滤:在左侧边栏中选择“响应代码”选项,可以查看指定响应代码(例如200、404等)的日志记录。
  5. 按文本过滤:在Zap日志界面的右上角有一个搜索框,可以输入关键字来搜索日志。输入关键字后,Zap会将包含该关键字的所有日志记录显示在界面上。

以上仅是Zap日志过滤的一些基本方法,Zap还提供了许多其他过滤选项,例如按Cookie、响应头等过滤。在日志界面中,可以通过单击“过滤器”按钮来访问所有可用的过滤选项。

总之,Zap的日志过滤功能非常强大,可以帮助开发人员快速找到特定的日志记录,并进行分析和调试。通过合理使用Zap的日志过滤功能,开发人员可以更好地管理和分析应用程序的日志记录,提高应用程序的可靠性和安全性。