打造 Zap 开箱即用日志组件(打造娱乐帝国 万乘北宸)

网友投稿 1176 2022-08-19

打造 zap 开箱即用日志组件(打造娱乐帝国 万乘北宸)

打造 Zap 开箱即用日志组件(打造娱乐帝国 万乘北宸)

logrus 是 golang 一款非常优秀的日志框架, 其优点非常明显:

优雅的代码框架设计, 

使用简单

组件化的开发思路

灵活的输出方式

目前 golang 日志库的大众选择主要集中在: logrus, zap, zerolog. zap 和 zerolog 的性能都是优秀的, 但是从用法习惯上我更倾向于 zap.

简单介绍 Zap 的使用

Zap 提供三种不同方式的输出(以 Info为 例)

log.Info("hello zap") // {"level":"info","ts":1576423173.016333,"caller":"test_zap/main.go:28","msg":"hello zap"} log.Infof("hello %s", "zap") // {"level":"info","ts":1576423203.056074,"caller":"test_zap/main.go:29","msg":"hello zap"} log.Infow("hello zap", "field1", "value1") //{"level":"info","ts":1576423203.0560799,"caller":"test_zap/main.go:30","msg":"hello zap","field1":"value1"}

如果我们对 logrus 的 key-value 理论比较在意的话, 使用 zap infow 可以完美解决

Zap 使用起来不便利的地方

Zap 使用上不能像 logrus 那样开箱即用

使用者需要自己去组装相关函数

Zap 同样不提供日志切割的功能, 但是想添加上这个功能没有 logrus 那样便利

基于这些问题, 我封装了一套开箱即用的日志组件: https://github.com/georgehao/log

打造 Zap 开箱即用日志组件

提供的功能:

像 logrus 一样, 全局的 Debug, Info ... 函数

日志分割功能. 默认文件大小1024M,自动压缩, 最大有3个文件备份,备份保存时间7天, 不会打印日志被调用的文文件名和位置

日志默认会被分成五类文件:xxx.log.DEBUG,xxx.log.INFO, xxx.log.WARN, xxx.log.ERROR, xxx.log.Request. error, panic. fatal 都会打印在xxx.log.ERROR. xxx.log.Request输出 request log 的地方(如果有需要的话)

框架图

使用方法

go get github.com/georgehao/log

例子

package main import "github.com/georgehao/log" func main() { // init log // set absolute path, and level // set output level // don't need request log // set log's caller using logOption log.Init("./test.log", log.DebugLevel, false, log.SetCaller(true))

log.Info("hello george log") // flush log.Sync() //output: {"level":"info","ts":"2019-12-16T10:37:11.364+0800","caller":"example/example.go:12","msg":"hello george log"} }

参考

Logrus源码阅读(1)--基本用法

Logrus源码阅读(2)--logrus生命周期

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Go新手容易犯的三个致命错误,你中招了吗?(go语言遇到的坑)
下一篇:Go 每日一库之 validator:Go最优秀的验证库(goal)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~