Added a logger utility

This commit is contained in:
Blue Fox 2023-07-09 09:58:37 +02:00
parent 71c9eec427
commit 74e8ad31be

126
utils.py Normal file
View File

@ -0,0 +1,126 @@
# This Python file uses the following encoding: utf-8
# Logger class that has 7 log levels: trace/all (6), debug (5), info(4), warning (3), error (2), fatal (1), off (0)
# log "level" -1 is always printed out ("On")
LOG_LVL_FALLBACK = 4 # the default level for logging
class Logger:
def __init__(self, log_level=LOG_LVL_FALLBACK):
self.mappings = { # mappings for the color and syntax of the log
-1: {
"prefix": "",
"space_between": "",
"prefix_colors": ShellColors.F_Default + ShellColors.B_Default,
"text_colors": ShellColors.F_Default + ShellColors.B_Default,
},
1: {
"prefix": "[FATAL]",
"space_between": " ",
"prefix_colors": ShellColors.F_White + ShellColors.B_Red,
"text_colors": ShellColors.B_Red + ShellColors.F_White,
},
2: {
"prefix": "[ERROR]",
"space_between": " ",
"prefix_colors": ShellColors.F_White + ShellColors.B_Red,
"text_colors": ShellColors.B_Red + ShellColors.F_White,
},
3: {
"prefix": "[WARN]",
"space_between": " ",
"prefix_colors": ShellColors.F_LightRed + ShellColors.B_Default,
"text_colors": ShellColors.F_Default + ShellColors.B_Default,
},
4: {
"prefix": "[INFO]",
"space_between": " ",
"prefix_colors": ShellColors.F_Green + ShellColors.B_Default,
"text_colors": ShellColors.F_Default + ShellColors.B_Default,
},
5: {
"prefix": "[DEBUG]",
"space_between": " ",
"prefix_colors": ShellColors.F_LightGray + ShellColors.B_Default,
"text_colors": ShellColors.F_Default + ShellColors.B_Default,
},
6: {
"prefix": "[TRACE]",
"space_between": " ",
"prefix_colors": ShellColors.F_Default + ShellColors.B_Default,
"text_colors": ShellColors.F_Default + ShellColors.B_Default,
},
}
if -1 <= log_level <= 6:
self.log_level = log_level
else: # if the given level exeeds the allowed scope
self.log_level = LOG_LVL_FALLBACK
self.log(f"The log level exeeds the allowed scope. Defaulting to {LOG_LVL_FALLBACK}", 3)
def log(self, message, log_level=4):
if log_level <= self.log_level: # only log when supposed to (if the given lvl is lower/equal (than) the maximum wanted)
prefix_colors = self.mappings[log_level]['prefix_colors']
prefix = self.mappings[log_level]['prefix']
space_between = self.mappings[log_level]['space_between']
text_colors = self.mappings[log_level]['text_colors']
end_color = ShellColors.Reset
print(f"{prefix_colors}{prefix}{text_colors}{space_between}{message}{end_color}")
# just for prettier shell outputs (especially log)
# source: https://stackoverflow.com/questions/39473297/how-do-i-print-colored-output-with-python-3
class ShellColors:
# Foreground
F_Default = "\x1b[39m"
F_Black = "\x1b[30m"
F_Red = "\x1b[31m"
F_Green = "\x1b[32m"
F_Yellow = "\x1b[33m"
F_Blue = "\x1b[34m"
F_Magenta = "\x1b[35m"
F_Cyan = "\x1b[36m"
F_LightGray = "\x1b[37m"
F_DarkGray = "\x1b[90m"
F_LightRed = "\x1b[91m"
F_LightGreen = "\x1b[92m"
F_LightYellow = "\x1b[93m"
F_LightBlue = "\x1b[94m"
F_LightMagenta = "\x1b[95m"
F_LightCyan = "\x1b[96m"
F_White = "\x1b[97m"
# Background
B_Default = "\x1b[49m"
B_Black = "\x1b[40m"
B_Red = "\x1b[41m"
B_Green = "\x1b[42m"
B_Yellow = "\x1b[43m"
B_Blue = "\x1b[44m"
B_Magenta = "\x1b[45m"
B_Cyan = "\x1b[46m"
B_LightGray = "\x1b[47m"
B_DarkGray = "\x1b[100m"
B_LightRed = "\x1b[101m"
B_LightGreen = "\x1b[102m"
B_LightYellow = "\x1b[103m"
B_LightBlue = "\x1b[104m"
B_LightMagenta = "\x1b[105m"
B_LightCyan = "\x1b[106m"
B_White = "\x1b[107m"
# Formatting
Bold = "\x1b[1m"
Dim = "\x1b[2m"
Italic = "\x1b[3m"
Underlined = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"
# Reset part
Reset = "\x1b[0m"
Reset_Bold = "\x1b[21m"
Reset_Dim = "\x1b[22m"
Reset_Italic = "\x1b[23m"
Reset_Underlined = "\x1b[24"
Reset_Blink = "\x1b[25m"
Reset_Reverse = "\x1b[27m"
Reset_Hidden = "\x1b[28m"