github.com/dfklegend/cell2/utils@v0.0.0-20240402033734-a0a9f3d9335d/logger/proxy/logs.go (about) 1 package proxy 2 3 import ( 4 "sync" 5 6 "github.com/sirupsen/logrus" 7 ) 8 9 var ( 10 logs = NewLogs() 11 ) 12 13 func GetLogs() *Logs { 14 return logs 15 } 16 17 type Logs struct { 18 prefix string 19 logDir string 20 21 logs map[string]*LogProxy 22 mutex *sync.RWMutex 23 } 24 25 func NewLogs() *Logs { 26 return &Logs{ 27 prefix: "node", 28 logDir: "", 29 logs: make(map[string]*LogProxy), 30 mutex: &sync.RWMutex{}, 31 } 32 } 33 34 func (l *Logs) AddOrCreate(name string) *LogProxy { 35 return l.AddLog(name) 36 } 37 38 func (l *Logs) AddLog(name string) *LogProxy { 39 l.mutex.Lock() 40 defer l.mutex.Unlock() 41 42 if l.logs[name] != nil { 43 return l.logs[name] 44 } 45 46 log := NewLog() 47 log.Init(name, logrus.InfoLevel) 48 if l.logDir != "" { 49 log.EnableFileLog(l.prefix, l.logDir) 50 } 51 52 l.logs[name] = log 53 return log 54 } 55 56 func (l *Logs) GetLog(name string) *LogProxy { 57 l.mutex.RLock() 58 defer l.mutex.RUnlock() 59 60 return l.logs[name] 61 } 62 63 func (l *Logs) EnableFileLog(prefix, logDir string) { 64 l.mutex.Lock() 65 defer l.mutex.Unlock() 66 67 l.prefix = prefix 68 l.logDir = logDir 69 for _, v := range l.logs { 70 v.EnableFileLog(prefix, logDir) 71 } 72 }