CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-structlog

Structured logging for Python that emphasizes simplicity, power, and performance

Overview
Eval results
Files

configuration.mddocs/

Configuration and Setup

Global configuration system for structlog that controls how loggers are created, how log events are processed, and how the overall logging pipeline behaves. Configuration is typically done once at application startup and affects all subsequent logger creation.

Capabilities

Global Configuration

Configure structlog's global defaults including processors, wrapper classes, context classes, and logger factories.

def configure(
    processors=None,
    wrapper_class=None,
    context_class=None,
    logger_factory=None,
    cache_logger_on_first_use=None
) -> None:
    """
    Configure structlog's global defaults.

    Args:
        processors (list, optional): List of processor functions/classes to apply to all log events
        wrapper_class (type, optional): Class to wrap loggers (default: BoundLogger)
        context_class (type, optional): Class for context storage (default: dict)
        logger_factory (callable, optional): Factory function for creating loggers
        cache_logger_on_first_use (bool, optional): Whether to cache loggers after first use
    """

Conditional Configuration

Configure structlog only if it hasn't been configured already, useful for libraries that want to set defaults without overriding user configuration.

def configure_once(
    processors=None,
    wrapper_class=None,
    context_class=None,
    logger_factory=None,
    cache_logger_on_first_use=None
) -> None:
    """
    Configure structlog only if not already configured.

    Args:
        Same as configure()
    """

Configuration Inspection

Get the current configuration state and check whether structlog has been configured.

def get_config() -> dict[str, Any]:
    """
    Get current structlog configuration as a dictionary.

    Returns:
        dict: Current configuration with keys for processors, wrapper_class, 
              context_class, logger_factory, cache_logger_on_first_use
    """

def is_configured() -> bool:
    """
    Check if structlog has been configured.

    Returns:
        bool: True if configure() has been called, False otherwise
    """

Configuration Reset

Reset structlog to its built-in defaults, clearing any previous configuration.

def reset_defaults() -> None:
    """
    Reset structlog to built-in defaults.
    
    This clears any previous configuration and restores the original
    default processors, wrapper class, and other settings.
    """

Usage Examples

Basic Configuration

import structlog

# Simple configuration with console output
structlog.configure(
    processors=[
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.dev.ConsoleRenderer()
    ],
    wrapper_class=structlog.stdlib.BoundLogger,
    logger_factory=structlog.stdlib.LoggerFactory(),
    cache_logger_on_first_use=True,
)

Production Configuration

import structlog
import logging

# Configure Python logging first
logging.basicConfig(
    level=logging.INFO,
    format="%(message)s",
)

# Configure structlog for JSON output
structlog.configure(
    processors=[
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.processors.add_log_level,
        structlog.processors.JSONRenderer()
    ],
    wrapper_class=structlog.stdlib.BoundLogger,
    logger_factory=structlog.stdlib.LoggerFactory(),
    context_class=dict,
    cache_logger_on_first_use=True,
)

Development Configuration

import structlog

# Configuration optimized for development
structlog.configure(
    processors=[
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.dev.ConsoleRenderer(
            colors=True,
            exception_formatter=structlog.dev.rich_traceback
        )
    ],
    wrapper_class=structlog.stdlib.BoundLogger,
    logger_factory=structlog.stdlib.LoggerFactory(),
    cache_logger_on_first_use=True,
)

Conditional Configuration for Libraries

import structlog

# Library code that sets defaults without overriding user config
def setup_logging():
    structlog.configure_once(
        processors=[
            structlog.processors.TimeStamper(),
            structlog.processors.JSONRenderer()
        ],
        wrapper_class=structlog.stdlib.BoundLogger,
        logger_factory=structlog.stdlib.LoggerFactory(),
    )

Configuration Inspection

import structlog

# Check if configured
if not structlog.is_configured():
    # Set up default configuration
    structlog.configure(...)

# Get current configuration
config = structlog.get_config()
print(f"Processors: {config['processors']}")
print(f"Wrapper class: {config['wrapper_class']}")

Install with Tessl CLI

npx tessl i tessl/pypi-structlog

docs

bound-loggers.md

configuration.md

context-management.md

development-tools.md

exception-handling.md

index.md

logger-creation.md

output-loggers.md

processors.md

stdlib-integration.md

testing.md

tile.json