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  }