67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
import logging
|
||
import time
|
||
import os
|
||
|
||
from config import LOG_FILE_NAME
|
||
|
||
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(): # Инициализирует систему логирования
|
||
|
||
# Добавляем разделитель для нового сеанса
|
||
if os.path.exists(LOG_FILE_NAME):
|
||
with open(LOG_FILE_NAME, "a", encoding="utf-8") as f:
|
||
f.write("\n" + "=" * 60 + "\n")
|
||
f.write(f"{'ЗАПУЩЕН НОВЫЙ СЕАНС':^60}\n")
|
||
f.write("=" * 60 + "\n\n")
|
||
|
||
# Создаем корневой логгер
|
||
logger = logging.getLogger()
|
||
logger.setLevel(logging.INFO)
|
||
|
||
# Проверяем, не настроен ли логгер ранее
|
||
if not logger.hasHandlers():
|
||
console_handler = logging.StreamHandler()
|
||
console_handler.setFormatter(ColoredFormatter())
|
||
|
||
# Сохраняем логи в файл
|
||
file_handler = logging.FileHandler(LOG_FILE_NAME, encoding='utf-8')
|
||
file_handler.setFormatter(UncoloredFormatter())
|
||
|
||
logger.addHandler(console_handler)
|
||
logger.addHandler(file_handler)
|
||
|
||
return logger |