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  }