package log import ( "sync" "github.com/sirupsen/logrus" ) const ( SERVER = "server" SYSTEM = "system" DATABASE = "database" CRON = "cron" QUEUE = "queue" RABBIT = "rabbit" internal = "internal" ) var Global *LoggerManager func SetGlobalManager(manager *LoggerManager) { Global = manager } type LoggerManager struct { loggers map[string]*logrus.Logger mu sync.Mutex } func (m *LoggerManager) Get(name string) *logrus.Logger { m.mu.Lock() defer m.mu.Unlock() if logger, ok := m.loggers[name]; ok { return logger } return nil } func (m *LoggerManager) Put(name string, logger *logrus.Logger) { m.mu.Lock() defer m.mu.Unlock() if _, ok := m.loggers[name]; ok { m.Get(internal).Errorf("Logger with name '%s' already exists. Use PutForce to replace it.", name) return } logger.Formatter = NewTextFormatter(name) m.loggers[name] = logger } func (m *LoggerManager) PutForce(name string, logger *logrus.Logger) { m.mu.Lock() defer m.mu.Unlock() logger.Formatter = NewTextFormatter(name) m.loggers[name] = logger } func NewManager() *LoggerManager { manager := &LoggerManager{ loggers: make(map[string]*logrus.Logger), } manager.Put(internal, logrus.New()) return manager }