Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 35 additions & 17 deletions pyutils/pylogger.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,32 @@
#! /usr/bin/env python

# 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, "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

Expand All @@ -13,15 +37,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
Expand All @@ -34,15 +49,18 @@ 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"]

# 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 = self.LOG_LEVELS[level_name]["level"]
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
Expand All @@ -66,4 +84,4 @@ def _detect_level(self, message):
elif "max" or "debug" in message:
return "max"
else:
return "info"
return "info"