Skip to main content

Enterprise-grade logging system with business intelligence for Storm Development

Project description

โšก Storm Logger

PyPI version Python Versions License: GPL v2 Downloads Code style: black

Enterprise-grade Python logging with business intelligence, beautiful console output, and zero-configuration framework integration.

โšก Storm Logger - Log the Storm - Weather your Code โšก


๐Ÿš€ Why Storm Logger?

Storm Logger transforms mundane application logging into a powerful business intelligence tool while making your console output beautiful and insightful.

โœจ Key Benefits

  • ๐ŸŽจ Beautiful Console Output - Rich formatting with themes, colors, tables, and progress bars
  • ๐Ÿ“Š Business Intelligence - Built-in metrics, KPIs, and performance tracking
  • ๐Ÿ”ง Zero Configuration - Works instantly with sensible defaults
  • ๐Ÿ Django Integration - First-class Django support with one-line setup
  • ๐Ÿ”’ Security First - Automatic PII detection and sanitization
  • โšก High Performance - Minimal overhead, production-ready
  • ๐ŸŽฏ Developer Friendly - Intuitive API that feels like Python's logging

๐ŸŽญ See the Difference

# Traditional logging - boring and hard to read
logger.info("User login successful user_id=12345 ip=192.168.1.1 time=1683ms")

# Storm Logger - beautiful and informative
logger.success("User login successful", user_id=12345, ip="192.168.1.1", response_time=1.683)
# Output: โœ… User login successful | user_id: 12345 | ip: 192.168.1.1 | response_time: 1.683s

# With automatic business intelligence
logger.business_metric("user_login", response_time=1.683, user_type="premium")
# Tracks metrics, generates insights, alerts on anomalies

๐ŸŽฏ Quick Start (30 seconds)

Installation

# Basic installation
pip install storm-logger

# With Django integration
pip install storm-logger[django]

# All features (recommended)
pip install storm-logger[all]

Basic Usage

from storm_logger import get_logger

# Get a logger instance (works just like Python's logging)
logger = get_logger(__name__)

# Beautiful, intuitive logging
logger.info("Application started")
logger.success("Database connected", db_name="postgres", latency=0.023)
logger.warning("Cache miss", key="user_sessions", fallback="database")
logger.error("Payment failed", user_id=123, amount=99.99, error="Invalid card")

# Business intelligence built-in
logger.business_metric("checkout_attempt", amount=99.99, user_type="premium")
logger.track_performance("api_request", duration=0.145)

Console Output Example

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 2024-01-15 10:30:45 | INFO     | app.main                      โ”‚
โ”‚ โœ… Application started                                           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 2024-01-15 10:30:46 | SUCCESS  | app.database                  โ”‚
โ”‚ โœ… Database connected | db_name: postgres | latency: 0.023s     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 2024-01-15 10:30:47 | WARNING  | app.cache                     โ”‚
โ”‚ โš ๏ธ  Cache miss | key: user_sessions | fallback: database         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐ŸŒ Django Integration

Storm Logger provides deep Django integration with automatic configuration based on your environment.

One-Line Setup

# settings.py
from storm_logger.integrations.django_config import DjangoStormLoggerConfig

# Automatic configuration based on DEBUG setting
LOGGING = DjangoStormLoggerConfig.for_environment('auto').for_django_settings()

Environment-Specific Configuration

# settings/production.py
from storm_logger.integrations.django_config import DjangoStormLoggerConfig

LOGGING = DjangoStormLoggerConfig.for_production(
    enable_error_emails=True,
    enable_business_metrics=True,
    track_performance_metrics=True,
).for_django_settings()
# settings/development.py
from storm_logger.integrations.django_config import DjangoStormLoggerConfig

LOGGING = DjangoStormLoggerConfig.for_development(
    enable_django_db_logging=True,     # See SQL queries
    enable_django_template_logging=True, # Template debugging
).for_django_settings()

Using in Django Views

from storm_logger import get_logger

logger = get_logger(__name__)

def checkout_view(request):
    logger.info("Checkout started", user_id=request.user.id)
    
    # Track business metrics
    logger.business_metric("checkout_attempt", cart_value=request.cart.total)
    
    # Performance tracking
    with logger.track_performance("payment_processing"):
        result = process_payment(request)
    
    if result.success:
        logger.success("Payment processed", amount=result.amount)
        logger.business_metric("revenue", amount=result.amount)
    else:
        logger.error("Payment failed", error=result.error)
    
    return redirect('order_complete' if result.success else 'checkout')

Advanced Django Features

# Per-app log level configuration
config = DjangoStormLoggerConfig(
    app_log_levels={
        'myapp': 'DEBUG',
        'myapp.views': 'INFO',
        'django.request': 'ERROR',
        'django.db.backends': 'WARNING',  # Less SQL noise
    },
    excluded_apps=['django.contrib.staticfiles'],
)

# Django-specific logging
from storm_logger.integrations.django import DjangoStormLogger

logger = DjangoStormLogger(__name__)
logger.log_django_request(request)  # Automatic request context
logger.log_model_change(instance, action="created")  # Model tracking

๐Ÿ Standalone Python Scripts

Perfect for scripts, CLI tools, services, and batch jobs.

Script Logging

from storm_logger.integrations.standalone import setup_script_logging

# Quick setup for scripts
logger = setup_script_logging(
    script_name="data_processor.py",
    log_level="INFO",
    log_to_file=True
)

logger.info("Starting data import")
logger.track_performance("csv_processing", file_size="125MB")
logger.success("Import completed", records_processed=50000)

CLI Applications

import argparse
from storm_logger.integrations.standalone import setup_cli_logging

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-v', '--verbose', action='count', default=0)
    parser.add_argument('-q', '--quiet', action='store_true')
    args = parser.parse_args()
    
    # Automatic verbosity handling
    logger = setup_cli_logging(
        app_name="myapp",
        verbosity=args.verbose,  # -v, -vv, -vvv
        quiet=args.quiet
    )
    
    logger.info("CLI application started")

Progress Tracking

from storm_logger.integrations.standalone import ScriptProgressLogger

# Beautiful progress tracking for batch jobs
progress = ScriptProgressLogger("data_migration")
progress.start("Migrating user data")

users = get_all_users()
for i, user in enumerate(users):
    progress.update(i + 1, len(users), f"Migrating {user.username}")
    migrate_user(user)

progress.complete(f"Successfully migrated {len(users)} users")

๐ŸŽจ Key Features

Beautiful Console Output

Choose from multiple themes to match your preference:

from storm_logger import StormLoggerConfig

# Available themes: storm, professional, midnight, minimal
config = StormLoggerConfig(storm_theme="midnight")
logger = get_logger(__name__, config)

Business Intelligence

Track KPIs and business metrics automatically:

# Track business events
logger.business_metric("user_signup", plan="premium", source="google")
logger.business_metric("api_usage", endpoint="/api/v1/users", response_time=0.123)

# Track performance
with logger.track_performance("database_query"):
    results = db.query("SELECT * FROM users")

# Get insights
insights = logger.get_business_insights()
# Returns: {"avg_response_time": 0.145, "total_requests": 1523, ...}

Security & Compliance

Automatic PII detection and sanitization:

# Automatically sanitizes sensitive data
logger.info("Processing payment", credit_card="4111-1111-1111-1111")
# Output: Processing payment | credit_card: ****-****-****-1111

# Configure sanitization levels
config = StormLoggerConfig(
    enable_sanitization=True,
    sanitization_level="strict",  # basic, medium, strict
    detect_pii=True
)

Rich Formatting

Tables, panels, progress bars, and more:

# Tables
logger.print_table(
    title="API Performance",
    data={
        "Endpoint": ["/users", "/products", "/orders"],
        "Avg Response": ["45ms", "120ms", "200ms"],
        "Success Rate": ["99.9%", "99.5%", "98.2%"]
    }
)

# Progress bars
with logger.progress_bar(total=1000, description="Processing") as progress:
    for item in items:
        process(item)
        progress.advance(1)

# Panels
logger.print_panel(
    "System Status: All services operational",
    title="Health Check",
    style="green"
)

โš™๏ธ Configuration

Environment Variables

# Basic configuration
export STORM_LOGGER_LEVEL=INFO
export STORM_LOGGER_FORMAT=json
export STORM_CONSOLE_THEME=midnight

# Features
export STORM_ENABLE_METRICS=true
export STORM_ENABLE_SANITIZATION=true
export STORM_SANITIZATION_LEVEL=medium

# Performance
export STORM_BUFFER_SIZE=10000
export STORM_FLUSH_INTERVAL=60

Programmatic Configuration

from storm_logger import StormLoggerConfig, LogLevel

config = StormLoggerConfig(
    # Logging behavior
    log_level=LogLevel.INFO,
    log_directory="/var/log/myapp",
    enable_console=True,
    console_colors=True,
    
    # Features
    enable_business_metrics=True,
    track_performance_metrics=True,
    enable_sanitization=True,
    
    # Formatting
    storm_theme="professional",
    timestamp_format="%Y-%m-%d %H:%M:%S",
    
    # Performance
    max_file_size=10 * 1024 * 1024,  # 10MB
    backup_count=5,
    compression=True,
)

logger = get_logger(__name__, config)

Framework-Specific Configuration

# Django
from storm_logger.integrations.django_config import DjangoStormLoggerConfig

config = DjangoStormLoggerConfig(
    enable_django_request_logging=True,
    enable_django_db_logging=False,  # Disable in production
    enable_error_emails=True,
    track_user_actions=True,
)

# Flask
from storm_logger.integrations.flask import FlaskStormLogger

app = Flask(__name__)
FlaskStormLogger(app, config)

๐Ÿ“š Advanced Usage

Custom Handlers and Formatters

from storm_logger import StormLogger, StormMessageFormatter

# Custom formatter
class CustomFormatter(StormMessageFormatter):
    def format_business_metric(self, metric, value, **kwargs):
        return f"๐Ÿ“Š {metric}: {value} | {kwargs}"

# Custom handler
class SlackHandler(logging.Handler):
    def emit(self, record):
        if record.levelno >= logging.ERROR:
            send_to_slack(self.format(record))

# Use custom components
logger = StormLogger(__name__)
logger.add_handler(SlackHandler())
logger.set_formatter(CustomFormatter())

Performance Optimization

# High-volume logging configuration
config = StormLoggerConfig(
    # Batch operations
    batch_size=1000,
    flush_interval=5.0,
    
    # Async logging
    enable_async=True,
    async_queue_size=10000,
    
    # Performance mode
    production_mode=True,
    enable_debug=False,
)

Integration with Monitoring Tools

# Export metrics to monitoring systems
from storm_logger.exporters import PrometheusExporter, DatadogExporter

# Prometheus
prometheus_exporter = PrometheusExporter(port=9090)
logger.add_metrics_exporter(prometheus_exporter)

# Datadog
datadog_exporter = DatadogExporter(api_key="your-api-key")
logger.add_metrics_exporter(datadog_exporter)

๐Ÿ”Œ Framework Integrations

Flask

from flask import Flask
from storm_logger.integrations.flask import FlaskStormLogger

app = Flask(__name__)
storm_logger = FlaskStormLogger(app)

@app.route('/api/users')
def get_users():
    storm_logger.info("Fetching users")
    return jsonify(users)

FastAPI

from fastapi import FastAPI
from storm_logger.integrations.fastapi import FastAPIStormLogger

app = FastAPI()
storm_logger = FastAPIStormLogger(app)

@app.get("/api/users")
async def get_users():
    storm_logger.info("Fetching users")
    return users

๐Ÿ“– API Reference

Core Classes

StormLogger

Main logger class with enhanced functionality.

logger = StormLogger(name, config=None)
logger.info(msg, **kwargs)
logger.success(msg, **kwargs)
logger.business_metric(metric, value, **kwargs)
logger.track_performance(operation_name)

StormLoggerConfig

Configuration management.

config = StormLoggerConfig(
    log_level="INFO",
    enable_console=True,
    enable_business_metrics=True,
    storm_theme="professional"
)

Utility Functions

# Get configured logger
logger = get_logger(__name__, config=None)

# Setup functions
setup_script_logging(script_name, log_level="INFO")
setup_cli_logging(app_name, verbosity=0, quiet=False)

# Django configuration
DjangoStormLoggerConfig.for_environment('auto')
DjangoStormLoggerConfig.for_production(**kwargs)
DjangoStormLoggerConfig.for_development(**kwargs)

๐Ÿค Contributing

We welcome contributions! Storm Logger is open source and community-driven.


๐Ÿ“„ License

Storm Logger is licensed under the GNU General Public License v2.0. See LICENSE for details.


๐ŸŒŸ Star Us!

If Storm Logger helps your project, please give us a star on GitHub! It helps others discover the project.


Built with โšก by Storm Development

Making Python logging beautiful, intelligent, and productive.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

storm_logger-2.0.3.tar.gz (642.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

storm_logger-2.0.3-py3-none-any.whl (65.4 kB view details)

Uploaded Python 3

File details

Details for the file storm_logger-2.0.3.tar.gz.

File metadata

  • Download URL: storm_logger-2.0.3.tar.gz
  • Upload date:
  • Size: 642.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for storm_logger-2.0.3.tar.gz
Algorithm Hash digest
SHA256 90109d60126413f7b225965718816f15b8a6d8fafff34158d3d70313dd2c8ccc
MD5 883b6f18250540838c0cdca6df8cde21
BLAKE2b-256 02b08a93bfb483f3da52948f72d33369e26655877eeb25c94d690a390d2d8f8c

See more details on using hashes here.

File details

Details for the file storm_logger-2.0.3-py3-none-any.whl.

File metadata

  • Download URL: storm_logger-2.0.3-py3-none-any.whl
  • Upload date:
  • Size: 65.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for storm_logger-2.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 30f3523e8aa2dfdb40ad81cda5a44aed1ce94a6b6ccd6f6c456e1cd0b4e19dcf
MD5 48de65ec791e4ac06160bcb611ae43d7
BLAKE2b-256 50d5e6a7a72560669f8e3169070da4e5a8f0d2ff22a09fdc687be19a419c1a45

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page