期望实现功能
按不同的日志级别存储到不同的日志文件中(这里只实现了info和error级别)
控制最多保留的日志文件及保留最近多少天的日志文件(控制日志的最大磁盘使用量)
控制每个日志文件的大小
我们使用zap和lumberjack框架实现
go get -u go.uber.org/zap
go get gopkg.in/natefinch/lumberjack.v2
lumberjack的Logger结构体如下
type Logger struct {
//写日志的文件名称
Filename string `json:"filename" yaml:"filename"`
//每个日志文件长度的最大大小,默认100M。
MaxSize int `json:"maxsize" yaml:"maxsize"`
//日志保留的最大天数(只保留最近多少天的日志)
MaxAge int `json:"maxage" yaml:"maxage"`
//只保留最近多少个日志文件,用于控制程序总日志的大小
MaxBackups int `json:"maxbackups" yaml:"maxbackups"`
//是否使用本地时间,默认使用UTC时间
LocalTime bool `json:"localtime" yaml:"localtime"`
// 是否压缩日志文件,压缩方法gzip
Compress bool `json:"compress" yaml:"compress"`
size int64 //记录当前日志文件的字节数
file *os.File //当前的日志文件
mu sync.Mutex
millCh chan bool
startMill sync.Once
}
lumberjack的使用及源码可参考: