test / src /modules /logger.py
Akcom's picture
Simple demo
54a235d
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)