github.com/abolfazlbeh/zhycan@v0.0.0-20230819144214-24cf38237387/internal/logger/manager.go (about) 1 package logger 2 3 // Imports needed list 4 import ( 5 "github.com/abolfazlbeh/zhycan/internal/config" 6 "log" 7 "sync" 8 ) 9 10 // Mark: manager 11 12 // Manager object 13 type manager struct { 14 name string 15 logger Logger 16 lock sync.Mutex 17 } 18 19 // MARK: Module variables 20 var managerInstance *manager = nil 21 var once sync.Once 22 23 // Module init function 24 func init() { 25 log.Println("Logger Manager Package Initialized...") 26 } 27 28 // init - Manager Constructor - It initializes the logger configuration params 29 func (m *manager) init() { 30 m.name = "logger" 31 m.lock.Lock() 32 defer m.lock.Unlock() 33 34 t, err := config.GetManager().Get(m.name, "type") 35 if err != nil { 36 return 37 } 38 39 if t == "zap" { 40 m.logger = &ZapWrapper{} 41 m.logger.Constructor(m.name) 42 } else if t == "logme" { 43 m.logger = &LogMeWrapper{} 44 m.logger.Constructor(m.name) 45 } 46 47 // Config config server to reload 48 wrapper, err := config.GetManager().GetConfigWrapper(m.name) 49 if err == nil { 50 wrapper.RegisterChangeCallback(func() interface{} { 51 return nil 52 }) 53 } 54 55 return 56 } 57 58 // MARK: Public Functions 59 60 // GetManager - This function returns singleton instance of Logger Manager 61 func GetManager() *manager { 62 // once used for prevent race condition and manage critical section. 63 once.Do(func() { 64 managerInstance = &manager{} 65 managerInstance.init() 66 }) 67 return managerInstance 68 } 69 70 // GetLogger - This function returns logger instance 71 func (m *manager) GetLogger() (Logger, *Error) { 72 m.lock.Lock() 73 defer m.lock.Unlock() 74 75 if m.logger != nil { 76 return m.logger, nil 77 } 78 return nil, NewError(nil) 79 }