diff --git a/core/utils/logger.py b/core/utils/logger.py new file mode 100644 index 0000000..d4a9006 --- /dev/null +++ b/core/utils/logger.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +""" +Настройка логирования для бота. +Создаёт логгер с выводом в консоль и в файл. +Уровень логирования может быть установлен в конфиге (DEBUG для разработки, INFO для production). + +Изменения: удалён aiomysql из списка шумных библиотек (заменён на asyncpg). +""" + +import logging +import sys +from pathlib import Path + + +def setup_logging(profile_name: str, log_file: Path, log_level: int = logging.INFO): + """ + Инициализирует логирование: + - вывод в консоль (StreamHandler) + - вывод в файл (FileHandler) + - снижает уровень шума для сторонних библиотек (slixmpp, asyncpg, qdrant_client и др.) + """ + log_format = '%(asctime)s [%(levelname)s] %(name)s: %(message)s' + # Формат даты: 2026-05-20 15:30:00 + date_format = '%Y-%m-%d %H:%M:%S' + + # Настройка корневого логгера + logging.basicConfig( + level=log_level, + format=log_format, + datefmt=date_format, + handlers=[ + logging.StreamHandler(sys.stdout), # вывод в консоль + logging.FileHandler(log_file, encoding='utf-8') # вывод в файл + ] + ) + + # Уменьшаем многословность некоторых библиотек (они пишут много DEBUG) + noisy_loggers = [ + "slixmpp", + "asyncpg", # вместо aiomysql (PostgreSQL) + "qdrant_client", + "httpx", + "gigachat", + "urllib3", + "asyncio", + "aiohttp" + ] + for lib in noisy_loggers: + logging.getLogger(lib).setLevel(logging.WARNING) + + # Для особо шумных можно ещё снизить, но оставляем WARNING + logging.getLogger("requests").setLevel(logging.WARNING) + logging.getLogger("urllib3").setLevel(logging.WARNING) \ No newline at end of file