"""Logging configuration — structured logging for Synapse.""" import logging import sys from pathlib import Path from config import LOGS_DIR, config def setup_logging(): LOGS_DIR.mkdir(exist_ok=True) root_logger = logging.getLogger("synapse") root_logger.setLevel(logging.DEBUG if config.debug else logging.INFO) console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.DEBUG if config.debug else logging.INFO) console_fmt = logging.Formatter( "[%(asctime)s] %(name)s %(levelname)s: %(message)s", datefmt="%H:%M:%S", ) console_handler.setFormatter(console_fmt) root_logger.addHandler(console_handler) file_handler = logging.FileHandler(LOGS_DIR / "synapse.log") file_handler.setLevel(logging.DEBUG) file_fmt = logging.Formatter( "[%(asctime)s] %(name)s %(levelname)s %(filename)s:%(lineno)d: %(message)s" ) file_handler.setFormatter(file_fmt) root_logger.addHandler(file_handler) error_handler = logging.FileHandler(LOGS_DIR / "errors.log") error_handler.setLevel(logging.ERROR) error_handler.setFormatter(file_fmt) root_logger.addHandler(error_handler) logging.getLogger("uvicorn").setLevel(logging.WARNING) logging.getLogger("httpx").setLevel(logging.WARNING) return root_logger