Skip to content

Configuration Patterns

Sherlock AI uses LoggingConfig directly for all configuration. This page shows ready-to-use patterns for common environments and use cases.

Environment Patterns

Development

Debug-level logging with human-readable text format:

from sherlock_ai import SherlockAI, LoggingConfig

config = LoggingConfig(
    log_format_type="log",   # human-readable .log files
    console_level="DEBUG",
    root_level="DEBUG"
)
SherlockAI(config).setup()

Features: - Debug-level console and file output - Human-readable .log files (easier to tail -f locally) - All default log files enabled

Production

Structured JSON format with larger rotation limits:

from sherlock_ai import SherlockAI, LoggingConfig, LogFileConfig

config = LoggingConfig(
    log_format_type="json",        # structured JSON files
    console_level="WARNING",
    log_files={
        "app": LogFileConfig(
            "app",
            max_bytes=50*1024*1024,   # 50MB
            backup_count=10
        ),
        "errors": LogFileConfig(
            "errors",
            level="ERROR",
            max_bytes=50*1024*1024,
            backup_count=10
        ),
        "performance": LogFileConfig(
            "performance",
            max_bytes=50*1024*1024,
            backup_count=10
        ),
        "monitoring": LogFileConfig("monitoring"),
        "error_insights": LogFileConfig("error_insights"),
        "performance_insights": LogFileConfig("performance_insights"),
    }
)
SherlockAI(config).setup()

Features: - JSON format for log aggregation (Elasticsearch, Splunk, CloudWatch) - INFO-level logging with reduced console noise - Larger file sizes for fewer rotations

Minimal

Console + basic app log only — good for simple scripts or testing:

from sherlock_ai import SherlockAI, LoggingConfig, LogFileConfig

config = LoggingConfig(
    log_files={
        "app": LogFileConfig("app"),
        "errors": LogFileConfig("errors", level="ERROR"),
    }
)
SherlockAI(config).setup()

Features: - Only essential log files - Minimal disk usage - Console output enabled

Performance Focus

Only log performance data — useful for benchmarking:

from sherlock_ai import SherlockAI, LoggingConfig, LogFileConfig, LoggerConfig

config = LoggingConfig(
    console_enabled=False,
    log_files={
        "performance": LogFileConfig("performance"),
    },
    loggers={
        "performance": LoggerConfig(
            "PerformanceLogger",
            log_files=["performance"],
            propagate=False
        )
    }
)
SherlockAI(config).setup()

Features: - Performance log file only - No console output (cleaner for benchmarking) - Dedicated to performance metrics

Custom File Names

Specify your own file names by passing base filenames — paths are automatically expanded:

from sherlock_ai import SherlockAI, LoggingConfig, LogFileConfig

config = LoggingConfig(
    logs_dir="logs",
    log_format_type="json",
    log_files={
        "app": LogFileConfig("application"),      # → logs/application.json
        "errors": LogFileConfig("error_tracking"), # → logs/error_tracking.json
        "performance": LogFileConfig("metrics"),   # → logs/metrics.json
    }
)
SherlockAI(config).setup()

Environment-Based Selection

Choose a pattern based on an environment variable:

import os
from sherlock_ai import SherlockAI, LoggingConfig, LogFileConfig

env = os.getenv("ENVIRONMENT", "development")

if env == "production":
    config = LoggingConfig(
        log_format_type="json",
        console_level="WARNING",
        log_files={
            "app": LogFileConfig("app", max_bytes=50*1024*1024, backup_count=10),
            "errors": LogFileConfig("errors", level="ERROR", max_bytes=50*1024*1024),
            "performance": LogFileConfig("performance"),
            "monitoring": LogFileConfig("monitoring"),
            "error_insights": LogFileConfig("error_insights"),
            "performance_insights": LogFileConfig("performance_insights"),
        }
    )
elif env == "staging":
    config = LoggingConfig(
        log_format_type="json",
        console_level="DEBUG"   # More verbose than prod for debugging
    )
elif env == "testing":
    config = LoggingConfig(
        logs_dir="test_logs",
        console_enabled=False,
        log_files={"app": LogFileConfig("app")}
    )
else:
    # Development
    config = LoggingConfig(
        log_format_type="log",
        console_level="DEBUG",
        root_level="DEBUG"
    )

SherlockAI(config).setup()

Modifying a Configuration

Build a base config then adjust it:

from sherlock_ai import SherlockAI, LoggingConfig, LogFileConfig

# Start with production-style settings
config = LoggingConfig(
    log_format_type="json",
    console_level="WARNING",
)

# Then tune specific values
config.console_level = "INFO"
config.log_files["app"].max_bytes = 100 * 1024 * 1024  # 100MB

SherlockAI(config).setup()

Pattern Comparison

Pattern Console Level Format Log Files Use Case
Development DEBUG .log All (default) Local development
Production WARNING .json App, Errors, Performance + insights Production
Minimal INFO .json App, Errors only Simple apps / tests
Performance Only Disabled .json Performance only Benchmarking

Best Practices

1. Build Your Own Helper

Create a module-level factory so your config is centralised:

from sherlock_ai import LoggingConfig, LogFileConfig

def get_logging_config(env: str = "development") -> LoggingConfig:
    if env == "production":
        return LoggingConfig(
            log_format_type="json",
            console_level="WARNING",
        )
    return LoggingConfig(
        log_format_type="log",
        console_level="DEBUG",
        root_level="DEBUG",
    )

2. Use Environment Variables

import os
config = LoggingConfig(
    logs_dir=os.getenv("LOG_DIR", "logs"),
    console_level=os.getenv("LOG_LEVEL", "INFO"),
    log_format_type=os.getenv("LOG_FORMAT", "json")
)

3. Use Minimal Config for Testing

# In test setup
from sherlock_ai import SherlockAI, LoggingConfig, LogFileConfig

SherlockAI(LoggingConfig(
    console_enabled=False,
    log_files={"app": LogFileConfig("app")}
)).setup()

Next Steps