feat: survey.Reg 支持每次写入就持久化的策略

This commit is contained in:
kercylan98 2023-08-24 12:02:42 +08:00
parent 2c67fe072f
commit 3fc282afab
3 changed files with 24 additions and 19 deletions

View File

@ -73,6 +73,9 @@ func (slf *logger) writer(d string) {
slf.bl.Lock() slf.bl.Lock()
slf.bs = append(slf.bs, d) slf.bs = append(slf.bs, d)
slf.bl.Unlock() slf.bl.Unlock()
if slf.interval <= 0 {
slf.flush()
}
} }
// filePath 获取文件路径 // filePath 获取文件路径

View File

@ -15,7 +15,7 @@ func WithLayout(layout string) Option {
} }
// WithFlushInterval 设置日志文件刷新间隔 // WithFlushInterval 设置日志文件刷新间隔
// - 默认为 3s // - 默认为 3s,当日志文件刷新间隔 <= 0 时,将会在每次写入日志时刷新日志文件
func WithFlushInterval(interval time.Duration) Option { func WithFlushInterval(interval time.Duration) Option {
return func(logger *logger) { return func(logger *logger) {
logger.interval = interval logger.interval = interval

View File

@ -46,26 +46,28 @@ func Reg(name, filePath string, options ...Option) {
option(logger) option(logger)
} }
_, exist = timers[logger.interval] if logger.interval > 0 {
if !exist { _, exist = timers[logger.interval]
t := time.NewTimer(logger.interval) if !exist {
timers[logger.interval] = t t := time.NewTimer(logger.interval)
timerSurvey[logger.interval] = make(map[string]struct{}) timers[logger.interval] = t
go func(interval time.Duration) { timerSurvey[logger.interval] = make(map[string]struct{})
for { go func(interval time.Duration) {
<-t.C for {
timerSurveyLock.Lock() <-t.C
for n := range timerSurvey[interval] { timerSurveyLock.Lock()
survey[n].flush() for n := range timerSurvey[interval] {
survey[n].flush()
}
timerSurveyLock.Unlock()
if !t.Reset(interval) {
break
}
} }
timerSurveyLock.Unlock() }(logger.interval)
if !t.Reset(interval) { }
break timerSurvey[logger.interval][name] = struct{}{}
}
}
}(logger.interval)
} }
timerSurvey[logger.interval][name] = struct{}{}
survey[name] = logger survey[name] = logger
log.Info("Survey", log.String("Action", "Reg"), log.String("Name", name), log.String("FilePath", dir+"/"+fn+".${DATE}"+ext)) log.Info("Survey", log.String("Action", "Reg"), log.String("Name", name), log.String("FilePath", dir+"/"+fn+".${DATE}"+ext))