2
0
Files
2026-03-29 18:14:41 +03:00

75 lines
1.3 KiB
Go

package rotatehook
import (
"sync"
"git.corp.kornet35.ru/gopkg/logrus"
"git.corp.kornet35.ru/gopkg/lumberjack/v2"
)
type Config struct {
Filename string
MaxSize int
MaxAge int
MaxBackups int
LocalTime bool
Compress bool
// FileMode os.FileMode
Formatter logrus.Formatter
Level logrus.Level
Enabled bool
}
type RotateHook struct {
logger *lumberjack.Logger
mu sync.RWMutex
cfg *Config
}
func NewRotateHook(cfg *Config) *RotateHook {
h := &RotateHook{
cfg: cfg,
logger: &lumberjack.Logger{
Filename: cfg.Filename,
MaxSize: cfg.MaxSize,
MaxAge: cfg.MaxAge,
MaxBackups: cfg.MaxBackups,
LocalTime: cfg.LocalTime,
Compress: cfg.Compress,
// FileMode: cfg.FileMode,
},
}
return h
}
func (h *RotateHook) Levels() []logrus.Level {
h.mu.RLock()
defer h.mu.RUnlock()
return logrus.AllLevels[:h.cfg.Level+1]
}
func (h *RotateHook) Fire(entry *logrus.Entry) (err error) {
b, err := h.cfg.Formatter.Format(entry)
if err != nil {
return err
}
if h.Enabled() {
h.logger.Write(b)
}
return nil
}
func (h *RotateHook) Enabled() bool {
h.mu.RLock()
defer h.mu.RUnlock()
return h.cfg.Enabled
}
func (h *RotateHook) SetEnabled(enabled bool) {
h.mu.Lock()
defer h.mu.Unlock()
h.cfg.Enabled = enabled
}