49 lines
2.0 KiB
Python
Executable File
49 lines
2.0 KiB
Python
Executable File
import logging
|
|
import sys
|
|
|
|
class ColoredFormatter(logging.Formatter):
|
|
COLORS = { # ANSI escape sequences for colors
|
|
'DEBUG': '\033[35m', # Purple
|
|
'INFO': '\033[36m', # Green
|
|
'WARNING': '\033[33m', # Yellow
|
|
'ERROR': '\033[31m', # Red
|
|
'CRITICAL': '\033[41m', # Red background
|
|
}
|
|
RESET = '\033[0m' # Reset to default color
|
|
|
|
def format(self, record):
|
|
color = self.COLORS.get(record.levelname, self.RESET)
|
|
message = super().format(record)
|
|
formatted_message = f"{color}{message}{self.RESET}"
|
|
if record.levelname == 'CRITICAL':
|
|
print(formatted_message)
|
|
sys.exit(1)
|
|
return formatted_message
|
|
|
|
|
|
log = logging.getLogger() # Настраиваем логирование
|
|
def set_logging_level(level_string="INFO"):
|
|
levels = {
|
|
'DEBUG': logging.DEBUG,
|
|
'INFO': logging.INFO,
|
|
'WARNING': logging.WARNING,
|
|
'ERROR': logging.ERROR,
|
|
'CRITICAL': logging.CRITICAL
|
|
}
|
|
|
|
level = levels.get(level_string, logging.WARNING) # Уровень по умолчанию
|
|
if level == logging.WARNING:
|
|
print(f"Неизвестный уровень логирования: {level_string}. Устанавливается уровень WARNING.")
|
|
return level
|
|
|
|
handler = logging.StreamHandler() # Создаем консольный обработчик
|
|
handler.setFormatter(ColoredFormatter('%(levelname)s: %(message)s'))
|
|
|
|
# TODO: добавить условие для управления переменой пути сохранения лога
|
|
log_file_path = 'portproton.log' # Это может быть переменная, установленная пользователем
|
|
file_handler = logging.FileHandler(log_file_path) # Создаем файловый обработчик
|
|
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s: %(message)s'))
|
|
|
|
log.addHandler(file_handler)
|
|
log.addHandler(handler)
|