import logging import os def configure_logging(): """Configure structured JSON logging for the application.""" log_level = logging.DEBUG if os.getenv("APP_ENV", "development") == "development" else logging.INFO try: from pythonjsonlogger import jsonlogger handler = logging.StreamHandler() formatter = jsonlogger.JsonFormatter( fmt="%(asctime)s %(levelname)s %(name)s %(message)s", datefmt="%Y-%m-%dT%H:%M:%S", rename_fields={"asctime": "timestamp", "levelname": "level", "name": "logger"}, ) handler.setFormatter(formatter) except ImportError: # Fallback to plain text if pythonjsonlogger not installed yet handler = logging.StreamHandler() handler.setFormatter( logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") ) root_logger = logging.getLogger() root_logger.handlers.clear() root_logger.addHandler(handler) root_logger.setLevel(log_level) # Silence noisy third-party loggers logging.getLogger("uvicorn.access").setLevel(logging.WARNING) logging.getLogger("httpx").setLevel(logging.WARNING) logging.getLogger("httpcore").setLevel(logging.WARNING) logging.getLogger("hpack").setLevel(logging.WARNING)