Implement logging levels

This commit is contained in:
George Lacey 2025-01-18 17:59:23 +00:00
parent 94d6ae4101
commit b013416e2f
3 changed files with 26 additions and 9 deletions

View File

@ -1,2 +1,6 @@
INFO=0
WARNING=5
ERROR=10
from .log import Log from .log import Log
from .logcat import LogCat from .logcat import LogCat

View File

@ -2,11 +2,13 @@ from datetime import datetime
from multiprocessing import Lock from multiprocessing import Lock
from threading import Thread from threading import Thread
from queue import Queue, Empty from queue import Queue, Empty
from . import INFO, WARNING, ERROR
class Log(object): class Log(object):
def __init__(self, path, queue=None, print_output=True, timeout=1): def __init__(self, path, queue=None, print_output=True, timeout=1, level=WARNING):
self.__terminated = False self.__terminated = False
self.level = level
self.file_lock = Lock() self.file_lock = Lock()
if not path.exists(): if not path.exists():
@ -42,9 +44,10 @@ class Log(object):
while len(log_msg_list) < lines: while len(log_msg_list) < lines:
try: try:
log_line = self.queue.get(block=True, timeout=timeout) log_line = self.queue.get(block=True, timeout=timeout)
if self.print: level, message = log_line
print(log_line) if self.print and level >= self.level:
log_msg_list.append(f"{log_line.encode('cp1252', errors='replace').decode('cp1252')}\n") print(message)
log_msg_list.append(f"{message.encode('cp1252', errors='replace').decode('cp1252')}\n")
except Empty: except Empty:
break break
finally: finally:

View File

@ -1,5 +1,6 @@
from datetime import datetime from datetime import datetime
from multiprocessing import Queue from multiprocessing import Queue
from . import INFO, WARNING, ERROR
class LogCat(object): class LogCat(object):
@ -8,15 +9,24 @@ class LogCat(object):
self.category = category self.category = category
def _write(self, level: str, function: str, message: str) -> None: def _write(self, level: int, function: str, message: str) -> None:
time = datetime.now().strftime("%Y-%m-%dT%H:%M:%S") time = datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
self.queue.put(f"{level} | {time} - {self.category.upper()}.{function.upper()}: {message}") self.queue.put((level, f"{self.level_string(level)} | {time} - {self.category.upper()}.{function.upper()}: {message}"))
def info(self, function: str, message: str) -> None: def info(self, function: str, message: str) -> None:
self._write("INFO", function, message) self._write(INFO, function, message)
def warning(self, function: str, message: str) -> None: def warning(self, function: str, message: str) -> None:
self._write("WARN", function, message) self._write(WARNING, function, message)
def error(self, function: str, message: str) -> None: def error(self, function: str, message: str) -> None:
self._write("ERR ", function, message) self._write(ERROR, function, message)
@staticmethod
def level_string(level: int) -> str:
if level == INFO:
return "INFO"
elif level == WARNING:
return "WARN"
elif level == ERROR:
return "ERR "