zap和lumberjack的使用和封装
项目打算写日志,没有选好合适的日志库,所以研究了下两个日志库。
lumberjack介绍
这个库我通读了源码,因为代码比较少。
它的主要功能是对文件卷动和压缩进行了抽象。
lumberjack 的主要格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ``` type Logger struct { //文件名 Filename string `json: "filename" yaml: "filename" ` //单个文件最大尺寸,默认单位M MaxSize int `json: "maxsize" yaml: "maxsize" ` //日志最大时间 MaxAge int `json: "maxage" yaml: "maxage" ` //备份日志的数量 MaxBackups int `json: "maxbackups" yaml: "maxbackups" ` //日志的本地时间 LocalTime bool `json: "localtime" yaml: "localtime" ` //是否压缩 Compress bool `json: "compress" yaml: "compress" ` //文件尺寸 size int64 //文件句柄 file *os.File //锁 mu sync.Mutex //chan millCh chan bool //同步一次变量 startMill sync.Once } ``` |
zap介绍
zap是uber开源的日志库,性能超级赞。源码太长,没有全部读完。
但可以简单使用。
结合两者的特性进行封装
flg
对zlog和lumberjack进行封装。希望能够结合两者的优点
toml config 基本的配置
```
[jackcfg]
filename="test.log"
maxsize=500
maxage=7
maxbackups=1000
localtime=true
compress=false
[zapcfgs]
[zapcfgs.1]
level="info"
isdev=true
logmod=3
servername="test"
```
使用
```
l := &flg.Logger{}
err := l.LoadFromFile("test.toml")
if err != nil{
panic("get file faild")
}
ltest,err := l.GetLogByKey("test")
ltest.Info("a test")
ltest.Info("abc",zap.Int("int",11))
```
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律