
Go语言有着很多的日志管理库,比如star数靠前的logrus,然而logrus库并不自带日志切割功能,想要做到日志切割,就需要用到file-rotatelogs库,这里就有个小问题。
我在刚开始用的时候,代码如下
writer, _ := rotateLogs.New( folder + "/Service_" + time.Now().Format("20060102").log", //rotateLogs.WithLinkName(folder), rotateLogs.WithMaxAge(time.Duration(60)*time.Second), rotateLogs.WithRotationTime(time.Duration(10)*time.Second), ) log.SetOutput(writer)
后来在运行的时候发现这段代码根本就不进行日志切割,后来在对比github的原版代码发现,他的代码里是不带time的,我根据他的代码来对自己的做了一下修改,修改后的代码如下
writer, _ := rotateLogs.New( folder+"/Service_%Y%m%d.log", //rotateLogs.WithLinkName(folder), rotateLogs.WithMaxAge(time.Duration(60)*time.Second), rotateLogs.WithRotationTime(time.Duration(10)*time.Second), ) log.SetOutput(writer)
再次运行测试之后发现日志果然进行了切割,于是开始寻找答案,这是RotateLogs结构体的定义
type RotateLogs struct { clock Clock curFn string curBaseFn string globPattern string generation int linkName string maxAge time.Duration mutex sync.RWMutex eventHandler Handler outFh *os.File pattern *strftime.Strftime rotationTime time.Duration rotationSize int64 rotationCount uint forceNewFile bool }
注意这里有个pattern,而文件名就是根据这个生成的,用修改之后的代码,相当于每次用新的时间去匹配%Y%m%d这三个字符串,所以可以产生新的日志文件并写入里面。而第一种呢,相当于把文件名固定死了,因此就不会做日志切割了。
未经允许随便转载:看过够 » 【go开源库踩坑指北】使用file-rotatelogs对logrus日志切割 使用file-rotatelogs对logrus日志切割