72 lines
4.1 KiB
Python
72 lines
4.1 KiB
Python
# node_logger.py
|
||
|
||
# Словник ANSI кольорів
|
||
COLORS = {
|
||
'BLACK': '\33[30m', 'RED': '\33[31m', 'GREEN': '\33[32m', 'YELLOW': '\33[33m',
|
||
'BLUE': '\33[34m', 'MAGENTA': '\33[35m', 'CYAN': '\33[36m', 'WHITE': '\33[37m',
|
||
'GREY': '\33[90m', 'BRIGHT_RED': '\33[91m', 'BRIGHT_GREEN': '\33[92m',
|
||
'BRIGHT_YELLOW': '\33[93m', 'BRIGHT_BLUE': '\33[94m', 'BRIGHT_MAGENTA': '\33[95m',
|
||
'BRIGHT_CYAN': '\33[96m', 'BRIGHT_WHITE': '\33[97m',
|
||
'RESET': '\33[00m', 'BOLD': '\33[01m', 'NORMAL': '\33[22m', 'ITALIC': '\33[03m',
|
||
'UNDERLINE': '\33[04m', 'BLINK': '\33[05m', 'BLINK2': '\33[06m', 'SELECTED': '\33[07m',
|
||
'BG_BLACK': '\33[40m', 'BG_RED': '\33[41m', 'BG_GREEN': '\33[42m', 'BG_YELLOW': '\33[43m',
|
||
'BG_BLUE': '\33[44m', 'BG_MAGENTA': '\33[45m', 'BG_CYAN': '\33[46m', 'BG_WHITE': '\33[47m',
|
||
'BG_GREY': '\33[100m', 'BG_BRIGHT_RED': '\33[101m', 'BG_BRIGHT_GREEN': '\33[102m',
|
||
'BG_BRIGHT_YELLOW': '\33[103m', 'BG_BRIGHT_BLUE': '\33[104m', 'BG_BRIGHT_MAGENTA': '\33[105m',
|
||
'BG_BRIGHT_CYAN': '\33[106m', 'BG_BRIGHT_WHITE': '\33[107m',
|
||
}
|
||
|
||
# Унікальний глобальний префікс
|
||
GLOBAL_PREFIX = "San4itos" # Замініть на бажаний
|
||
|
||
|
||
def log(message, color=None, msg_color=None, prefix=None):
|
||
"""Базова функція логування."""
|
||
# Колір для [GLOBAL_PREFIX][prefix]
|
||
color_code = COLORS.get(str(color).upper(), COLORS.get("BRIGHT_GREEN"))
|
||
# Колір для самого повідомлення
|
||
msg_color_code = COLORS.get(str(msg_color).upper(), '') # Якщо msg_color не вказано, колір не змінюється
|
||
|
||
prefix_str = f'[{prefix}]' if prefix is not None else ''
|
||
|
||
|
||
# Збережемо логіку: color - це колір для всього блоку префіксів
|
||
full_prefix_block = f"[{GLOBAL_PREFIX}]{prefix_str}"
|
||
|
||
# Якщо msg_color не вказано (тобто порожній рядок), то повідомлення буде того ж кольору, що й префікс,
|
||
# доки не зустрінеться COLORS["RESET"]. Якщо msg_color вказано, він перекриє колір префіксу для тексту повідомлення.
|
||
print(f'{color_code}{full_prefix_block}{COLORS.get("RESET")} {msg_color_code}{message}{COLORS.get("RESET")}')
|
||
# Невелика зміна: додав RESET після префіксу, щоб msg_color не "успадковував" колір префіксу, якщо msg_color не заданий.
|
||
# Або, якщо хочемо поведінки, де msg_color='' означає "продовжити поточний колір":
|
||
# print(f'{color_code}{full_prefix_block} {msg_color_code}{message}{COLORS.get("RESET")}')
|
||
|
||
|
||
def _log_node(prefix_block_color_name, node_specific_prefix, message, msg_color='RESET'):
|
||
"""Внутрішня функція логування для вузлів (адаптована з rgthree)."""
|
||
log(message, color=prefix_block_color_name, prefix=node_specific_prefix, msg_color=msg_color)
|
||
|
||
|
||
def log_node_success(node_name, message, msg_color_override='BRIGHT_GREEN'):
|
||
"""Логує повідомлення про успіх."""
|
||
_log_node("GREEN", node_name, message, msg_color=msg_color_override)
|
||
|
||
|
||
def log_node_info(node_name, message, msg_color_override='YELLOW'):
|
||
"""Логує інформаційне повідомлення."""
|
||
_log_node("CYAN", node_name, message, msg_color=msg_color_override)
|
||
|
||
|
||
def log_node_warning(node_name, message, msg_color_override='BRIGHT_YELLOW'):
|
||
"""Логує попередження."""
|
||
_log_node("YELLOW", node_name, message, msg_color=msg_color_override)
|
||
|
||
|
||
def log_node_error(node_name, message, msg_color_override='BRIGHT_RED'):
|
||
"""Логує повідомлення про помилку."""
|
||
_log_node("RED", node_name, message, msg_color=msg_color_override)
|
||
|
||
|
||
# Якщо у вас є log_node_debug або log_node_message, їх також потрібно перевірити/виправити:
|
||
def log_node_debug(node_name, message, msg_color_override='GREY'):
|
||
_log_node("MAGENTA", node_name, message, msg_color=msg_color_override)
|