From b013416e2fc7610699cacd2e31636c1a226fbc2d Mon Sep 17 00:00:00 2001 From: grglcy Date: Sat, 18 Jan 2025 17:59:23 +0000 Subject: [PATCH] Implement logging levels --- src/log/__init__.py | 4 ++++ src/log/log.py | 11 +++++++---- src/log/logcat.py | 20 +++++++++++++++----- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/log/__init__.py b/src/log/__init__.py index 8b8291a..eaaf16f 100644 --- a/src/log/__init__.py +++ b/src/log/__init__.py @@ -1,2 +1,6 @@ +INFO=0 +WARNING=5 +ERROR=10 + from .log import Log from .logcat import LogCat diff --git a/src/log/log.py b/src/log/log.py index ea0a2df..fb6ee91 100644 --- a/src/log/log.py +++ b/src/log/log.py @@ -2,11 +2,13 @@ from datetime import datetime from multiprocessing import Lock from threading import Thread from queue import Queue, Empty +from . import INFO, WARNING, ERROR 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.level = level self.file_lock = Lock() if not path.exists(): @@ -42,9 +44,10 @@ class Log(object): while len(log_msg_list) < lines: try: log_line = self.queue.get(block=True, timeout=timeout) - if self.print: - print(log_line) - log_msg_list.append(f"{log_line.encode('cp1252', errors='replace').decode('cp1252')}\n") + level, message = log_line + if self.print and level >= self.level: + print(message) + log_msg_list.append(f"{message.encode('cp1252', errors='replace').decode('cp1252')}\n") except Empty: break finally: diff --git a/src/log/logcat.py b/src/log/logcat.py index 8e46b0b..c958b79 100644 --- a/src/log/logcat.py +++ b/src/log/logcat.py @@ -1,5 +1,6 @@ from datetime import datetime from multiprocessing import Queue +from . import INFO, WARNING, ERROR class LogCat(object): @@ -8,15 +9,24 @@ class LogCat(object): 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") - 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: - self._write("INFO", function, message) + self._write(INFO, function, message) 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: - 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 "