Spaces:
Sleeping
Sleeping
File size: 2,738 Bytes
ce82348 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | # src/utils/logger.py
"""
Общие утилиты логирования для всего проекта.
Включает стандартную настройку вывода в консоль и специализированный трекер коллизий физического движка.
"""
import logging
import sys
from typing import List
class CollisionTracker(logging.Handler):
"""
Перехватчик логов для отслеживания коллизий физического движка.
Накапливает сообщения о неудачном размещении объектов.
"""
def __init__(self) -> None:
"""Инициализация трекера с пустым списком проваленных элементов."""
super().__init__()
self.failed_items: List[str] = []
def emit(self, record: logging.LogRecord) -> None:
"""Перехватывает сообщения об ошибках размещения объектов."""
if "Couldn't place object" in record.getMessage():
self.failed_items.append(record.getMessage())
class FlushStreamHandler(logging.StreamHandler):
"""
Обработчик логов с принудительным сбросом буфера.
Гарантирует мгновенный вывод сообщений в консоль.
"""
def emit(self, record: logging.LogRecord) -> None:
"""Записывает лог и сразу сбрасывает буфер вывода."""
super().emit(record)
self.flush()
def setup_logger() -> CollisionTracker:
"""
Настраивает корневой логгер для вывода в stdout и возвращает трекер коллизий.
Отключает лишний спам от сторонних библиотек.
Returns:
CollisionTracker: Объект для отслеживания ошибок физики.
"""
root_logger: logging.Logger = logging.getLogger()
if root_logger.hasHandlers():
root_logger.handlers.clear()
root_logger.setLevel(logging.INFO)
tracker: CollisionTracker = CollisionTracker()
root_logger.addHandler(tracker)
console_handler: FlushStreamHandler = FlushStreamHandler(sys.stdout)
console_handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(message)s"))
root_logger.addHandler(console_handler)
# Отключаем спам от библиотеки trimesh
logging.getLogger("trimesh").setLevel(logging.ERROR)
return tracker |