| import sys | |
| from src.utils.singleton import Singleton | |
| class SysLogger: | |
| def __init__(self, filename): | |
| self.filename = filename | |
| self.terminal = sys.stdout | |
| self.log = open(self.filename, "w") | |
| def clear(self): | |
| self.log.close() | |
| self.log = open(self.filename, "w") | |
| def get(self): | |
| self.terminal.flush() | |
| self.log.flush() | |
| with open(self.filename, "r") as f: | |
| return f.read() | |
| def write(self, message): | |
| self.terminal.write(message) | |
| self.log.write(message + "\n") | |
| class Logger: | |
| __metaclass__ = Singleton | |
| def __init__(self, name: str = "default", safe_history: bool = False): | |
| self._name = name | |
| self._safe_history = safe_history | |
| if self._safe_history: | |
| self.sys_logger = SysLogger(f"{self._name}_logs.log") | |
| def _log(self, message: str): | |
| f_message = (f"{self._name}: " if self._name != "default" else "") + message | |
| if self._safe_history: | |
| self.sys_logger.write(f_message) | |
| else: | |
| print(f_message) | |
| def clear_history(self): | |
| if self._safe_history: | |
| self.sys_logger.clear() | |
| def get_history(self): | |
| if self._safe_history: | |
| return self.sys_logger.get() | |
| return "" | |
| def catch(self, message: str, error): | |
| self._log(f"{message} Error: {error}") | |
| raise error | |
| def debug(self, message: str): | |
| self._log(f"debug: {message}") | |
| def info(self, message: str): | |
| self._log(f"info: {message}") | |
| def warn(self, message: str): | |
| self._log(f"warn: {message}") | |
| def error(self, message: str): | |
| self._log(f"error: {message}") | |
| def tmp_debug(self, message): | |
| self._log(f"tmp_debug: {message}") | |
| logger = Logger("default", True) | |