Spaces:
Running
Running
itaru2622
involve kwargs to pass parameters on creating RichHandler for logging customization. (#1504)
6d09a2a unverified | """Logging utilities for FastMCP.""" | |
| import logging | |
| from typing import Any, Literal | |
| from rich.console import Console | |
| from rich.logging import RichHandler | |
| def get_logger(name: str) -> logging.Logger: | |
| """Get a logger nested under FastMCP namespace. | |
| Args: | |
| name: the name of the logger, which will be prefixed with 'FastMCP.' | |
| Returns: | |
| a configured logger instance | |
| """ | |
| return logging.getLogger(f"FastMCP.{name}") | |
| def configure_logging( | |
| level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] | int = "INFO", | |
| logger: logging.Logger | None = None, | |
| enable_rich_tracebacks: bool = True, | |
| **rich_kwargs: Any, | |
| ) -> None: | |
| """ | |
| Configure logging for FastMCP. | |
| Args: | |
| logger: the logger to configure | |
| level: the log level to use | |
| rich_kwargs: the parameters to use for creating RichHandler | |
| """ | |
| if logger is None: | |
| logger = logging.getLogger("FastMCP") | |
| # Only configure the FastMCP logger namespace | |
| handler = RichHandler( | |
| console=Console(stderr=True), | |
| rich_tracebacks=enable_rich_tracebacks, | |
| **rich_kwargs, | |
| ) | |
| formatter = logging.Formatter("%(message)s") | |
| handler.setFormatter(formatter) | |
| logger.setLevel(level) | |
| # Remove any existing handlers to avoid duplicates on reconfiguration | |
| for hdlr in logger.handlers[:]: | |
| logger.removeHandler(hdlr) | |
| logger.addHandler(handler) | |
| # Don't propagate to the root logger | |
| logger.propagate = False | |