【go开源库踩坑指北】使用file-rotatelogs对logrus日志切割 使用file-rotatelogs对logrus日志切割

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日志切割

赞 (41) 打赏

评论 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. Hold PornFirst time here, haha回复
  2. 金万达啥也不说了,希望疫情早点结束吧!回复
  3. Much Photos WatchHow is the COVID situation over there?回复
  4. 择*网Leave me alone, I'm just taking a look回复

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏