Lagt till fler metoder. Sett till det är att root-loggaren som skapas vid instasieringen av denna singleton

This commit is contained in:
Joakim Persson
2024-07-28 23:22:08 +02:00
parent 807a766a63
commit 1b5624018c
+21 -2
View File
@@ -17,21 +17,40 @@ class GlobalState:
if cls._instance is None: if cls._instance is None:
cls._instance = super(GlobalState, cls).__new__(cls) cls._instance = super(GlobalState, cls).__new__(cls)
cls._instance.log_level = 'INFO' # Default logging level cls._instance.log_level = 'INFO' # Default logging level
cls._instance.logger = logging.getLogger(__name__) # Get logger for the caller module cls._instance.logger = logging.getLogger() # Get root logger for the caller module
handler = logging.StreamHandler() # Or other handler (FileHandler for logs to file) handler = logging.StreamHandler() # Or other handler (FileHandler for logs to file)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter) handler.setFormatter(formatter)
cls._instance.logger.addHandler(handler) cls._instance.logger.addHandler(handler)
cls._instance.logger.setLevel(getattr(logging, cls._instance.log_level)) # Initialize root logger level
cls._instance.logger.info(" __new__(cls): Logger in GlobalState created: %s", cls._instance.logger)
return cls._instance return cls._instance
def configure_logging(self, level=None): def configure_logging(self, level=None):
"""Set up logging for the project.""" """Set up logging for the project."""
if level is None: if level is None:
level = self.log_level level = self.log_level
# numeric_level = getattr(logging, level.upper()) # Convert string to numeric level
numeric_level = getattr(logging, level.upper()) # Convert string to numeric level numeric_level = getattr(logging, level.upper()) # Convert string to numeric level
self.logger.setLevel(numeric_level) self.logger.setLevel(numeric_level)
self.logger.debug(f"utils.py -- configure_logging(): effective log level is {level} which is {self.logger.getEffectiveLevel()}")
def set_log_level(self, level): def set_log_level(self, level = 'INFO'):
"""Set the logging level.""" """Set the logging level."""
self.log_level = level self.log_level = level
self.configure_logging() self.configure_logging()
def get_log_level(self):
"""Getter for log_level attribute."""
return self.log_level
def get_effective_log_level(self):
"""Getter for effective log level of loggerattribute."""
return self.logger.getEffectiveLevel()
def getLogger(self, module_name=None):
"""Return a logger based on the module name."""
if module_name is None:
module_name = __name__
logger = logging.getLogger(module_name)
return logger