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.bs = append(slf.bs, d)
slf.bl.Unlock()
if slf.interval <= 0 {
slf.flush()
}
}
// filePath 获取文件路径

View File

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

View File

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