58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
import logging
|
|
import time
|
|
import os
|
|
|
|
class ColoredFormatter(logging.Formatter): # Цветные логи (для терминала)
|
|
LEVEL_COLORS = {
|
|
logging.INFO: '\033[92m',
|
|
logging.WARNING: '\033[93m',
|
|
logging.ERROR: '\033[91m',
|
|
logging.CRITICAL: '\033[91m'
|
|
}
|
|
|
|
LEVEL_NAMES = {
|
|
logging.INFO: "I",
|
|
logging.WARNING: "W",
|
|
logging.ERROR: "E",
|
|
logging.CRITICAL: "C"
|
|
}
|
|
|
|
def format(self, record):
|
|
local_time = time.localtime(record.created)
|
|
time_str = time.strftime("%H:%M:%S", local_time)
|
|
date_str = time.strftime("%d-%m-%Y", local_time)
|
|
level_name = self.LEVEL_NAMES.get(record.levelno, record.levelname)
|
|
message = f"[{time_str}] [{date_str}] [{level_name}] {record.getMessage()}"
|
|
color = self.LEVEL_COLORS.get(record.levelno, "")
|
|
return f"{color}{message}\033[0m" if color else message
|
|
|
|
class UncoloredFormatter(logging.Formatter): # Бесцветные логи (для bot.log)
|
|
def format(self, record):
|
|
local_time = time.localtime(record.created)
|
|
time_str = time.strftime("%H:%M:%S", local_time)
|
|
date_str = time.strftime("%d-%m-%Y", local_time)
|
|
level_name = ColoredFormatter.LEVEL_NAMES.get(
|
|
record.levelno,
|
|
record.levelname
|
|
)
|
|
return f"[{time_str}] [{date_str}] [{level_name}] {record.getMessage()}"
|
|
|
|
def setup_logging(): # Инициализирует систему логирования
|
|
|
|
# Создаем корневой логгер
|
|
logger = logging.getLogger()
|
|
logger.setLevel(logging.INFO)
|
|
|
|
# Проверяем, не настроен ли логгер ранее
|
|
if not logger.hasHandlers():
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setFormatter(ColoredFormatter())
|
|
|
|
# Сохраняем логи в файл
|
|
file_handler = logging.FileHandler("bot.log", encoding='utf-8')
|
|
file_handler.setFormatter(UncoloredFormatter())
|
|
|
|
logger.addHandler(console_handler)
|
|
logger.addHandler(file_handler)
|
|
|
|
return logger |