mirror of https://github.com/1Panel-dev/1Panel
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.
54 lines
931 B
54 lines
931 B
4 months ago
|
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
|
||
|
}
|