Files
status/modules/log/manager.go
ostiwe b33df27b31 refactor: Switching to a cron system for tasks, restructuring service and status models
Added response time field for Status model, set log level from ENV
2025-10-28 00:55:43 +03:00

84 lines
1.4 KiB
Go

package log
import (
"os"
"strings"
"sync"
"github.com/sirupsen/logrus"
)
const (
SERVER = "server"
SYSTEM = "system"
DATABASE = "database"
CRON = "cron"
QUEUE = "queue"
Observer = "observer"
Scheduler = "scheduler"
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()
l, err := logrus.ParseLevel(strings.ToLower(os.Getenv("LOG_LEVEL")))
if err != nil {
l = logrus.ErrorLevel
}
logger.Level = l
if _, ok := m.loggers[name]; ok {
m.loggers[internal].Warnf("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
}