Skip to content

katana_public_api_client.log_setup

katana_public_api_client.log_setup

Logging setup utilities for the Katana API client.

This module provides logging configuration helpers for the enhanced Katana client.

Classes

InfoToDebugFilter

Bases: Filter

Filter to convert INFO level logs to DEBUG level for specific loggers.

Functions

get_logger(name=None)

Get a logger instance.

Parameters:

  • name (str | None, default: None ) –

    Logger name (defaults to katana_client)

Returns:

Source code in katana_public_api_client/log_setup.py
def get_logger(name: str | None = None) -> logging.Logger:
    """Get a logger instance.

    Args:
        name: Logger name (defaults to katana_client)

    Returns:
        Logger instance

    """
    return logging.getLogger(name or "katana_client")

setup_logging(log_dir='logs', log_file_prefix='katana_client', log_level=logging.INFO, console_level=logging.INFO, max_bytes=10 * 1024 * 1024, backup_count=5)

Set up logging configuration for the Katana client.

Parameters:

  • log_dir (str, default: 'logs' ) –

    Directory to store log files

  • log_file_prefix (str, default: 'katana_client' ) –

    Prefix for log file names

  • log_level (int, default: INFO ) –

    Logging level for file handler

  • console_level (int, default: INFO ) –

    Logging level for console handler

  • max_bytes (int, default: 10 * 1024 * 1024 ) –

    Maximum size of each log file before rotation

  • backup_count (int, default: 5 ) –

    Number of backup files to keep

Returns:

  • Logger

    Configured logger instance

Source code in katana_public_api_client/log_setup.py
def setup_logging(
    log_dir: str = "logs",
    log_file_prefix: str = "katana_client",
    log_level: int = logging.INFO,
    console_level: int = logging.INFO,
    max_bytes: int = 10 * 1024 * 1024,  # 10MB
    backup_count: int = 5,
) -> logging.Logger:
    """Set up logging configuration for the Katana client.

    Args:
        log_dir: Directory to store log files
        log_file_prefix: Prefix for log file names
        log_level: Logging level for file handler
        console_level: Logging level for console handler
        max_bytes: Maximum size of each log file before rotation
        backup_count: Number of backup files to keep

    Returns:
        Configured logger instance

    """
    # Create log directory if it doesn't exist
    log_path = Path(log_dir)
    log_path.mkdir(exist_ok=True)

    # Create logger
    logger = logging.getLogger("katana_client")
    logger.setLevel(logging.DEBUG)

    # Remove existing handlers to avoid duplicates
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)

    # Create formatters
    detailed_formatter = logging.Formatter(
        "%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s"
    )
    simple_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")

    # File handler with rotation
    log_file = log_path / f"{log_file_prefix}.log"
    file_handler = logging.handlers.RotatingFileHandler(
        log_file, maxBytes=max_bytes, backupCount=backup_count
    )
    file_handler.setLevel(log_level)
    file_handler.setFormatter(detailed_formatter)
    logger.addHandler(file_handler)

    # Console handler
    console_handler = logging.StreamHandler()
    console_handler.setLevel(console_level)
    console_handler.setFormatter(simple_formatter)
    logger.addHandler(console_handler)

    # Set up httpx logger with filter
    httpx_logger = logging.getLogger("httpx")
    httpx_logger.setLevel(logging.DEBUG)
    httpx_logger.addFilter(InfoToDebugFilter())

    logger.info(
        f"Logging configured - File: {log_file}, Level: {logging.getLevelName(log_level)}"
    )

    return logger