項目打算寫日志,沒有選好合適的日志庫,所以研究了下兩個日志庫。
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))
```
