添加自动文件压缩的实现
This commit is contained in:
+38
-2
@@ -1,6 +1,7 @@
|
||||
package loggerx
|
||||
|
||||
import (
|
||||
"compress/gzip"
|
||||
"io"
|
||||
"os"
|
||||
"time"
|
||||
@@ -19,7 +20,10 @@ type loggerOption struct {
|
||||
days int // 日志保存天数
|
||||
drivers []io.Writer // 文件落盘驱动器
|
||||
fileSplit FileSplit // 文件切割规则
|
||||
sizeSplit int // 根据文件大小切割
|
||||
sizeSplit int // 根据文件大小切割(字节,<=0 不切割)
|
||||
compress bool // 归档文件是否压缩为 .gz
|
||||
compressLvl int // gzip 压缩级别
|
||||
flushEvery time.Duration // 定时刷盘间隔,0 表示不开启
|
||||
timeZone *time.Location // 时区
|
||||
escapeHTML bool
|
||||
expandData map[string]string // 扩展字段
|
||||
@@ -45,6 +49,8 @@ func defaultOptions() loggerOption {
|
||||
traceField: "trace_id",
|
||||
days: 7,
|
||||
fileSplit: FileSplitTimeE,
|
||||
compress: true,
|
||||
compressLvl: gzip.BestSpeed,
|
||||
timeZone: time.Local,
|
||||
escapeHTML: true,
|
||||
expandData: make(map[string]string),
|
||||
@@ -186,13 +192,43 @@ const (
|
||||
|
||||
)
|
||||
|
||||
// 根据文件大小切割(暂时未生效)
|
||||
// 根据文件大小切割
|
||||
// m 为单个文件的大小上限(字节);<=0 表示不按大小切割
|
||||
// 超过上限时当前文件会被改名归档(并可选压缩),随后写入新文件
|
||||
func SetSizeSplit(m int) Option {
|
||||
return func(o *loggerOption) {
|
||||
o.sizeSplit = m
|
||||
}
|
||||
}
|
||||
|
||||
// 归档文件是否压缩成 .gz(默认开启)
|
||||
// 压缩在后台协程完成,不阻塞写入
|
||||
func SetCompress(open bool) Option {
|
||||
return func(o *loggerOption) {
|
||||
o.compress = open
|
||||
}
|
||||
}
|
||||
|
||||
// 压缩级别 1~9,数字越大压缩率越高、CPU 开销越大,默认 gzip.BestSpeed
|
||||
func SetCompressLevel(level int) Option {
|
||||
return func(o *loggerOption) {
|
||||
if level >= gzip.HuffmanOnly && level <= gzip.BestCompression {
|
||||
o.compressLvl = level
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 定时刷盘间隔(默认 0 = 不开启)
|
||||
// 开启后会按间隔把内存缓冲刷到磁盘,把「进程崩溃时可能丢失的数据量」
|
||||
// 从「最多 32KB 缓冲」压缩到「一个间隔内产生的日志量」
|
||||
func SetFlushInterval(d time.Duration) Option {
|
||||
return func(o *loggerOption) {
|
||||
if d > 0 {
|
||||
o.flushEvery = d
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func SetEscapeHTML(b bool) Option {
|
||||
return func(o *loggerOption) {
|
||||
o.escapeHTML = b
|
||||
|
||||
Reference in New Issue
Block a user