Enterprise-grade logging system with business intelligence for Storm Development
Project description
โก 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.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90109d60126413f7b225965718816f15b8a6d8fafff34158d3d70313dd2c8ccc
|
|
| MD5 |
883b6f18250540838c0cdca6df8cde21
|
|
| BLAKE2b-256 |
02b08a93bfb483f3da52948f72d33369e26655877eeb25c94d690a390d2d8f8c
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30f3523e8aa2dfdb40ad81cda5a44aed1ce94a6b6ccd6f6c456e1cd0b4e19dcf
|
|
| MD5 |
48de65ec791e4ac06160bcb611ae43d7
|
|
| BLAKE2b-256 |
50d5e6a7a72560669f8e3169070da4e5a8f0d2ff22a09fdc687be19a419c1a45
|