Files
LGBot/src/logger.py
2025-07-14 20:14:11 +03:00

67 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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