项目打算写日志,没有选好合适的日志库,所以研究了下两个日志库。 lumberjack介绍 这个库我通读了源码,因为代码比较少。 它的主要功能是对文件卷动和压缩进行了抽象。 lumberjack
项目打算写日志,没有选好合适的日志库,所以研究了下两个日志库。
lumberjack介绍
这个库我通读了源码,因为代码比较少。
它的主要功能是对文件卷动和压缩进行了抽象。
lumberjack 的主要格式
```
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))
```
https://github.com/beckbikang/flg
