⚡ Storm Logger
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.
- GitHub: https://github.com/storm-development/storm-logger
- Issues: Report bugs or request features
- Discussions: Join the community
📄 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.
Release files for storm-logger 2.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| storm_logger-2.0.3.tar.gz | 642.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| storm_logger-2.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 708.2 kB
Release files / storm_logger-2.0.3.tar.gz
| Download URL | storm_logger-2.0.3.tar.gz |
|---|---|
| Size | 642.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
90109d60126413f7b225965718816f15b8a6d8fafff34158d3d70313dd2c8ccc
|
|
BLAKE2b-256 checksum How to use checksums |
02b08a93bfb483f3da52948f72d33369e26655877eeb25c94d690a390d2d8f8c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.12
|
Release files / storm_logger-2.0.3-py3-none-any.whl
| Download URL | storm_logger-2.0.3-py3-none-any.whl |
|---|---|
| Size | 65.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
30f3523e8aa2dfdb40ad81cda5a44aed1ce94a6b6ccd6f6c456e1cd0b4e19dcf
|
|
BLAKE2b-256 checksum How to use checksums |
50d5e6a7a72560669f8e3169070da4e5a8f0d2ff22a09fdc687be19a419c1a45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.12
|