1.引用包
logrus包不能分割日志,所以必须配合file-rotatelogs包实现分割日志功能
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
log "github.com/sirupsen/logrus"
2.构建日志配置
注意:
path后面的时间格式最好和WithRotationTime设置的时间对应,
WRT设置为分钟时,path后面也设置到分钟,设置到分钟时,分钟的M必须大写,小写的话文件的时间后缀不会更新。
WRT设置为24小时,path后面也只设置到%d,d大写时会按照配置的时间创建文件夹,d小写时只会创建文件,不会创建文件夹,这个根据自身业务情况而定。
writer, _ := rotatelogs.New(
logFile+".%Y%m%d", //每天
rotatelogs.WithLinkName(logFile), //生成软链,指向最新日志文件
rotatelogs.WithRotationTime(24*time.Hour), //最小为1分钟轮询。默认60s 低于1分钟就按1分钟来
rotatelogs.WithRotationCount(3), //设置3份 大于3份 或到了清理时间 开始清理
rotatelogs.WithRotationSize(100*1024*1024), //设置100MB大小,当大于这个容量时,创建新的日志文件
// logFile+".%Y%m%d%H%M", //每分钟
// rotatelogs.WithLinkName(logFile), //生成软链,指向最新日志文件
// rotatelogs.WithRotationTime(time.Minute), //最小为1分钟轮询。默认60s 低于1分钟就按1分钟来
// rotatelogs.WithRotationCount(3), //设置3份 大于3份 或到了清理时间 开始清理
// rotatelogs.WithRotationSize(100*1024*1024), //设置100MB大小,当大于这个容量时,创建新的日志文件
)
log.SetFormatter(&log.TextFormatter{FullTimestamp: true})
log.SetLevel(minLevel)
log.SetOutput(writer)
初始化完成后:
1.满足轮询时间时,会轮询一次,如果文件名称后缀的时间和之前的不一样,会生成新的日志文件,如果一样不会生成
2.当前日志容量大于配置的容量时,会生成新的日志文件,如果时间一样,在时间后缀后面会自动加上一个数字后缀,以此区分同一时间的不同日志文件,如果时间不一样,则生成新的时间后缀文件
3.在新生成日志文件时,如果超过配置的文件数量,则会自动删除最早的日志文件,以此类推
我这里配置的是大于3份日志时执行清除,所以日志文件最多只会存在三份,没有时间后缀的文件算作是当前的日志文件,里面的内容只会和最新的日志文件一样,当新的日志文件被创建时,没有时间后缀的文件会自动清除内容
ps:当代码里面执行日志记录时,才会执行以上的步骤,所以不必担心会一直生成无用的日志文件
日志级别:
日志级别:"panic", "fatal", "error", "warn", "info", "debug", "trace"