import sys import logging class Logger: def __init__(self): self.logger = logging.getLogger(__name__) self.logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') file_handler = logging.FileHandler("logs.log", encoding="utf-8") file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(formatter) console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) console_handler.setFormatter(formatter) self.logger.addHandler(file_handler) self.logger.addHandler(console_handler) def init_global_exception_hook(self): def handle_exception(exc_type, exc_value, exc_traceback): if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__( exc_type, exc_value, exc_traceback ) return self.logger.critical("ERROR:", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_exception def send(self, level_log: str, message: str): getattr(self.logger, level_log)(message)