mirror of https://github.com/1Panel-dev/1Panel
appstorecrontabdatabasedockerdocker-composedocker-containerdocker-imagedocker-uifilemanagerlamplnmppanel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
931 B
53 lines
931 B
package log |
|
|
|
import ( |
|
"github.com/robfig/cron/v3" |
|
"path" |
|
"sync" |
|
"time" |
|
) |
|
|
|
type manager struct { |
|
startAt time.Time |
|
fire chan string |
|
cr *cron.Cron |
|
context chan int |
|
wg sync.WaitGroup |
|
lock sync.Mutex |
|
} |
|
|
|
func (m *manager) Fire() chan string { |
|
return m.fire |
|
} |
|
|
|
func (m *manager) Close() { |
|
close(m.context) |
|
m.cr.Stop() |
|
} |
|
|
|
func NewManager(c *Config) (Manager, error) { |
|
m := &manager{ |
|
startAt: time.Now(), |
|
cr: cron.New(), |
|
fire: make(chan string), |
|
context: make(chan int), |
|
wg: sync.WaitGroup{}, |
|
} |
|
|
|
if _, err := m.cr.AddFunc(c.RollingTimePattern, func() { |
|
m.fire <- m.GenLogFileName(c) |
|
}); err != nil { |
|
return nil, err |
|
} |
|
m.cr.Start() |
|
|
|
return m, nil |
|
} |
|
|
|
func (m *manager) GenLogFileName(c *Config) (filename string) { |
|
m.lock.Lock() |
|
filename = path.Join(c.LogPath, c.FileName+"-"+m.startAt.Format(c.TimeTagFormat)) + c.LogSuffix |
|
m.startAt = time.Now() |
|
m.lock.Unlock() |
|
return |
|
}
|
|
|