import logging import os import sys from datetime import datetime class Logger: """ Centralized logging class for the application. """ _instance = None def __new__(cls): """ Singleton pattern to ensure only one logger instance is created. """ if cls._instance is None: cls._instance = super(Logger, cls).__new__(cls) cls._instance._initialize_logger() return cls._instance def _initialize_logger(self): """ Initialize the logger with console and file handlers. """ # Create logs directory if it doesn't exist logs_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'logs') os.makedirs(logs_dir, exist_ok=True) # Create a logger self.logger = logging.getLogger('adf_chatbot') self.logger.setLevel(logging.DEBUG) # Create formatters console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(filename)s:%(lineno)d - %(message)s') # Create console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) console_handler.setFormatter(console_formatter) # Create file handler log_file = os.path.join(logs_dir, f'adf_chatbot_{datetime.now().strftime("%Y%m%d")}.log') file_handler = logging.FileHandler(log_file) file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(file_formatter) # Add handlers to logger self.logger.addHandler(console_handler) self.logger.addHandler(file_handler) def get_logger(self): """ Get the logger instance. Returns: logging.Logger: The logger instance. """ return self.logger # Create a global logger instance logger = Logger().get_logger() def get_logger(): """ Get the global logger instance. Returns: logging.Logger: The global logger instance. """ return logger