这是我参与「第五届青训营 」伴学笔记创作活动的第 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日志过滤的常用方法:
- 按时间过滤:在Zap日志界面的左侧边栏中,可以选择“时间戳”选项来过滤日志。通过选择开始和结束时间,可以仅查看指定时间范围内的日志记录。
- 按请求方式过滤:在左侧边栏中选择“HTTP方法”选项,可以仅查看指定请求方法(例如GET、POST等)的日志记录。
- 按URL过滤:在左侧边栏中选择“URL”选项,可以查看包含特定URL的日志记录。
- 按响应代码过滤:在左侧边栏中选择“响应代码”选项,可以查看指定响应代码(例如200、404等)的日志记录。
- 按文本过滤:在Zap日志界面的右上角有一个搜索框,可以输入关键字来搜索日志。输入关键字后,Zap会将包含该关键字的所有日志记录显示在界面上。
以上仅是Zap日志过滤的一些基本方法,Zap还提供了许多其他过滤选项,例如按Cookie、响应头等过滤。在日志界面中,可以通过单击“过滤器”按钮来访问所有可用的过滤选项。
总之,Zap的日志过滤功能非常强大,可以帮助开发人员快速找到特定的日志记录,并进行分析和调试。通过合理使用Zap的日志过滤功能,开发人员可以更好地管理和分析应用程序的日志记录,提高应用程序的可靠性和安全性。