"""Модуль для настройки кастомного логгера.
Обеспечивает цветной вывод в консоль и запись логов в файлы.
Attributes:
LOGS_DIR (str): Путь к директории, где будут сохраняться лог-файлы.
LOG_FORMAT (str): Формат строки лога.
DATE_FORMAT (str): Формат даты и времени в логах.
"""
import logging
import os
import sys
from datetime import datetime
from colorama import Back, Fore, Style, init
from configs.config import Config
# Инициализация colorama для Windows/Linux/macOS
init(autoreset=True)
# Путь к папке с логами
LOGS_DIR = "logs"
os.makedirs(LOGS_DIR, exist_ok=True)
# Формат логов
LOG_FORMAT = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
[документация]
def get_logger(name=None):
"""Возвращает настроенный логгер с указанным именем.
Создаёт и настраивает логгер, который выводит сообщения в консоль с цветовой
индикацией уровня логирования и записывает информационные и более серьёзные
сообщения в файл.
Args:
name (str, optional): Имя логгера. Если не указано, возвращается корневой логгер.
Returns:
logging.Logger: Настроенный экземпляр логгера.
"""
# Настройка корневого логгера при помощи configs/config.py
logger = logging.getLogger(name)
logger.setLevel(Config.LOG_LEVEL)
# Предотвращаем дублирование логов (если уже есть хэндлеры)
if logger.hasHandlers():
return logger
# --- Консольный вывод ---
console_handler = logging.StreamHandler(
open(sys.stdout.fileno(), mode="w", encoding="utf-8", buffering=1)
)
console_handler.setLevel(logging.DEBUG)
console_formatter = ColoredFormatter(fmt=LOG_FORMAT, datefmt=DATE_FORMAT)
console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler)
# --- Логирование в файл ---
log_file = os.path.join(LOGS_DIR, f"{datetime.now().strftime('%Y-%m-%d')}.log")
file_handler = logging.FileHandler(log_file, encoding="utf-8")
file_handler.setLevel(logging.INFO)
file_formatter = logging.Formatter(fmt=LOG_FORMAT, datefmt=DATE_FORMAT)
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)
return logger