""" πŸ“ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ логирования для HH.ru Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ """ import logging import logging.handlers from pathlib import Path from typing import Optional from .settings import AppConstants class LoggingConfigurator: """ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€ систСмы логирования""" @staticmethod def setup_logging( log_level: int = logging.INFO, log_file: Optional[str] = None, console_output: bool = True ) -> None: """ Настройка систСмы логирования Args: log_level: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ логирования log_file: Π€Π°ΠΉΠ» для записи Π»ΠΎΠ³ΠΎΠ² (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) console_output: Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π»ΠΈ Π»ΠΎΠ³ΠΈ Π² консоль """ root_logger = logging.getLogger() root_logger.setLevel(log_level) root_logger.handlers.clear() formatter = logging.Formatter( fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S" ) if console_output: console_handler = logging.StreamHandler() console_handler.setLevel(log_level) console_handler.setFormatter(formatter) root_logger.addHandler(console_handler) if log_file: log_path = Path(log_file) log_path.parent.mkdir(parents=True, exist_ok=True) file_handler = logging.handlers.RotatingFileHandler( log_file, maxBytes=AppConstants.LOG_FILE_MAX_SIZE_MB * 1024 * 1024, backupCount=5, encoding="utf-8", ) file_handler.setLevel(log_level) file_handler.setFormatter(formatter) root_logger.addHandler(file_handler) logging.getLogger("selenium").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) logging.getLogger("requests").setLevel(logging.WARNING) logging.info("Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ настроСно") def get_logger(name: str) -> logging.Logger: """ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³Π³Π΅Ρ€Π° для модуля""" return logging.getLogger(name)