- Go version >= 1.18
如果您经过测试,可以在较低版本下运行,可提
issue
或pull requests
变更版本前置和go.mod。
go get -u github.com/huashusu/rotate
package main
import (
"log"
"os"
"github.com/huashusu/rotate"
"time"
)
func main() {
file, err := rotate.New("log", "2006-01-02/15-04-05", "log",
rotate.WithRotationDuration(time.Minute*1),
rotate.WithDeleteEmptyFile(true),
rotate.WithMaxSize(rotate.MB*10),
rotate.WithMaxAge(time.Minute*5),
rotate.WithExpiredHandler(func(expFiles []string) {
for i := 0; i < len(expFiles); i++ {
os.Remove(expFiles[i])
}
}),
)
if err != nil {
panic(err)
}
log.SetOutput(file)
}
New
方法签名: func New(dir, layout, ext string, options ...Option) (*Rotate, error)
参数说明:
dir
: 存放日志文件的根目录layout
: 对生成的日志的使用的时间模板,使用的语法是内置time
包的format
方法,其中不要存在文件名非法字符,示例如下:- 不存在目录层级:layout:
2006-01-02-15-04-05
- 按月份区分日志:layout:
2006-01-02/15-04-05
- 按年月日区分日志:layout:
2006/01/02/15-04-05
- 不存在目录层级:layout:
ext
: 日志文件的后缀名
说明: 时间选择上使用了取整设计。如果设置小于一天的最好能被24(小时)整除,案例如下:
当前时间: 2023/09/12 15:45:40
- 设置10分钟:
2023/09/12 15:40:00
- 设置30分钟:
2023/09/12 15:30:00
- 设置1小时:
2023/09/12 15:00:00
- 设置6小时:
2023/09/12 12:00:00
- 设置1天:
2023/09/12 00:00:00
说明: 时间模板上就可以不携带时区标志,通过时区另外设置,用于取整时间、从文件名解析时间
说明: 每次切分文件后,都会检查有没有过期文件
说明: 写入超过文件大小后,就会切分,带有序号的日志文件
说明: 通常与过期时间一起使用,传入的是过期文件的路径,例如:压缩过期文件、读取文件并发送、删除文件等等
说明: 日志切分之后,如果上次文件大小为0,则删除
说明: 删除空文件日志之后,有可能会存在空文件夹,可以使用这个方法清理空文件夹
KB
: 1024
MB
: 1048576
GB
: 1073741824
Day
: time.Hour * 24
Week
: Day * 7
Month
: Day * 30
SetSymbol
: 设置文件中存在序号的左、右包裹符号,默认值:Left
=[
Right
=]
SetPerm
: 设置创建文件夹、文件的权限模式,默认值: 0644