"""Logging configuration.""" import logging import sys from pathlib import Path from logging.handlers import RotatingFileHandler def setup_logger( name: str = None, log_level: int = logging.INFO, log_file: str = "logs/bot.log" ) -> logging.Logger: root = logging.getLogger() # Не добавляем хендлеры повторно if root.handlers: return logging.getLogger(name) if name else root root.setLevel(log_level) console_formatter = logging.Formatter( '%(asctime)s | %(levelname)-8s | %(name)s | %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) file_formatter = logging.Formatter( '%(asctime)s | %(levelname)-8s | %(name)s | %(funcName)s:%(lineno)d | %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) if hasattr(sys.stdout, "reconfigure"): sys.stdout.reconfigure(encoding="utf-8", errors="replace") console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(log_level) console_handler.setFormatter(console_formatter) root.addHandler(console_handler) if log_file: Path(log_file).parent.mkdir(parents=True, exist_ok=True) file_handler = RotatingFileHandler( log_file, maxBytes=10 * 1024 * 1024, backupCount=5, encoding='utf-8' ) file_handler.setLevel(log_level) file_handler.setFormatter(file_formatter) root.addHandler(file_handler) return logging.getLogger(name) if name else root logger = setup_logger()