From 8fd25d5ca16796b3f19b00f85032472c66c5996f Mon Sep 17 00:00:00 2001 From: Simon Corrodi Date: Mon, 5 Jan 2026 18:56:41 -0600 Subject: [PATCH 1/2] Toggle emojis --- pyutils/pylogger.py | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/pyutils/pylogger.py b/pyutils/pylogger.py index 1f7ec8e..b15a21f 100644 --- a/pyutils/pylogger.py +++ b/pyutils/pylogger.py @@ -1,8 +1,21 @@ #! /usr/bin/env python + +# Global setting to toggle emojis +USE_EMOJIS = False + class Logger: """Helper class for consistent logging with emoji indicators """ - + # Define log levels with their corresponding emojis at class level + LOG_LEVELS = { + "error": {"emoji": "โŒ", "text": "[ERROR]", "level": 0}, + "test": {"emoji": "๐Ÿงช", "text": "[TEST]", "level": 0}, + "info": {"emoji": "โญ๏ธ", "text": "[INFO]", "level": 1}, + "success": {"emoji": "โœ…", "text": "[OK]", "level": 1}, + "warning": {"emoji": "โš ๏ธ", "text": "[WARN]", "level": 1}, + "max": {"emoji": "๐Ÿ‘€", "text": "[DEBUG]", "level": 2} + } + def __init__(self, verbosity=1, print_prefix="[pylogger]"): """Initialize the Logger @@ -13,15 +26,6 @@ def __init__(self, verbosity=1, print_prefix="[pylogger]"): self.verbosity = verbosity self.print_prefix = print_prefix - # Define log levels with their corresponding icons - self.LOG_LEVELS = { - "error": {"icon": "โŒ", "level": 0}, - "test": {"icon": "๐Ÿงช", "level": 0}, # for pytest - "info": {"icon": "โญ๏ธ", "level": 1}, - "success": {"icon": "โœ…", "level": 1}, - "warning": {"icon": "โš ๏ธ", "level": 1}, - "max": {"icon": "๐Ÿ‘€", "level": 2} - } def log(self, message, level_name=None): """Print a message based on verbosity level @@ -34,12 +38,13 @@ def log(self, message, level_name=None): if level_name is None: level_name = self._detect_level(message) - # Get icon - icon = self.LOG_LEVELS[level_name]["icon"] - - # Get level value - level_value = self.LOG_LEVELS[level_name]["level"] + # Check global at log time + level_info = self.LOG_LEVELS[level_name] + icon = level_info["emoji"] if USE_EMOJIS else level_info["text"] + # Get level value + level_value = level_info["level"] + # Only print if the inherited verbosity is high enough if self.verbosity >= level_value: print(f"{self.print_prefix} {icon} {message}") @@ -66,4 +71,4 @@ def _detect_level(self, message): elif "max" or "debug" in message: return "max" else: - return "info" \ No newline at end of file + return "info" From 3a7fc4d1cf7b25a1616fd4c48529edeab0da984a Mon Sep 17 00:00:00 2001 From: Simon Corrodi Date: Mon, 5 Jan 2026 19:16:49 -0600 Subject: [PATCH 2/2] Coloured text --- pyutils/pylogger.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/pyutils/pylogger.py b/pyutils/pylogger.py index b15a21f..17a6f7b 100644 --- a/pyutils/pylogger.py +++ b/pyutils/pylogger.py @@ -1,20 +1,31 @@ #! /usr/bin/env python -# Global setting to toggle emojis +# Global settings USE_EMOJIS = False +USE_COLORS = False class Logger: """Helper class for consistent logging with emoji indicators """ + # ANSI colour codes + COLORS = { + "red": "\033[91m", + "green": "\033[92m", + "yellow": "\033[93m", + "blue": "\033[94m", + "magenta": "\033[95m", + "reset": "\033[0m" + } + # Define log levels with their corresponding emojis at class level LOG_LEVELS = { - "error": {"emoji": "โŒ", "text": "[ERROR]", "level": 0}, - "test": {"emoji": "๐Ÿงช", "text": "[TEST]", "level": 0}, - "info": {"emoji": "โญ๏ธ", "text": "[INFO]", "level": 1}, - "success": {"emoji": "โœ…", "text": "[OK]", "level": 1}, - "warning": {"emoji": "โš ๏ธ", "text": "[WARN]", "level": 1}, - "max": {"emoji": "๐Ÿ‘€", "text": "[DEBUG]", "level": 2} - } + "error": {"emoji": "โŒ", "text": "[ERROR]", "level": 0, "color": "red"}, + "test": {"emoji": "๐Ÿงช", "text": "[TEST]", "level": 0, "color": "magenta"}, + "info": {"emoji": "โญ๏ธ", "text": "[INFO]", "level": 1, "color": "blue"}, + "success": {"emoji": "โœ…", "text": "[OK]", "level": 1, "color": "green"}, + "warning": {"emoji": "โš ๏ธ ", "text": "[WARN]", "level": 1, "color": "yellow"}, + "max": {"emoji": "๐Ÿ‘€", "text": "[DEBUG]", "level": 2, "color": "magenta"} + } def __init__(self, verbosity=1, print_prefix="[pylogger]"): """Initialize the Logger @@ -38,16 +49,18 @@ def log(self, message, level_name=None): if level_name is None: level_name = self._detect_level(message) - # Check global at log time + # Check globals at log time level_info = self.LOG_LEVELS[level_name] icon = level_info["emoji"] if USE_EMOJIS else level_info["text"] - + color = self.COLORS[level_info["color"]] if USE_COLORS else "" + reset = self.COLORS["reset"] + # Get level value level_value = level_info["level"] # Only print if the inherited verbosity is high enough if self.verbosity >= level_value: - print(f"{self.print_prefix} {icon} {message}") + print(f"{self.print_prefix} {color}{icon}{reset} {message}") def _detect_level(self, message): """Automatically detect appropriate log level based on message content