Skip to main content

Ein vollständiger, produktionsreifer Logger mit erweiterten Features für Python-Anwendungen und Discord Bots.

Project description

Professional Terminal Logger

Ein vollständiger, produktionsreifer Logger mit erweiterten Features für Python-Anwendungen und Discord Bots.

Python Version License: MIT

🚀 Features

Core Features

  • 🎨 Farbige Terminal-Ausgabe mit 90+ vordefinierten Kategorien
  • 📁 File-Logging mit automatischer Rotation und Kompression
  • 🎯 Level & Kategorie-Filtering für präzise Kontrolle
  • 🧵 Thread-safe mit Lock-Mechanismus
  • 📊 Multiple Output-Formate (Simple, Standard, Detailed, JSON)

Security & Compliance

  • 🔒 Sensitive Data Redaction (Passwörter, API-Keys, Tokens, Kreditkarten)
  • 🔍 Custom Regex-Patterns für Datenschutz
  • 📝 Audit-Trail Support für Compliance

Distributed Systems

  • 🌐 Correlation IDs für Request-Tracing über Microservices
  • 🔗 Trace & Span IDs für verteiltes Tracing
  • 📡 Remote Log Forwarding (Syslog-kompatibel)

Performance & Scale

  • 🎲 Sampling - Log nur X% der Messages
  • ⏱️ Rate Limiting - Max N Logs pro Minute
  • 🧠 Adaptive Logging - Automatische Level-Anpassung bei hoher Last
  • 📦 Buffer-System für Batch-Processing

Monitoring & Analytics

  • 🏥 Health Checks - Logger-Status überwachen
  • 📊 Prometheus Metrics Export - Integration mit Monitoring-Tools
  • 📈 Live-Statistiken - Echtzeit-Insights
  • 🎬 Session Recording - Vollständige Log-Aufzeichnung

Debug & Development

  • 🔍 Debug Tools - tail(), grep() für Log-Analyse
  • Performance Tracking - Automatische Zeitmessung
  • 🎭 Context Manager - Verschachtelte Logs mit Kontext
  • 📋 Tabellen & Progress Bars - Strukturierte Ausgabe

Discord Bot Support

  • 🤖 24 Discord-spezifische Kategorien für Bot-Entwicklung
  • 🎮 Vollständige Unterstützung für Cogs, Commands, Events, Voice, etc.

📦 Installation

pip install SimpleColoredLogs

🎯 Quick Start

Basic Usage

from logs import Logs, LogLevel, Category

# Konfiguration
Logs.configure(
    log_file="app.log",
    min_level=LogLevel.INFO,
    show_metadata=False
)

# Einfache Logs
Logs.info(Category.SYSTEM, "Application started")
Logs.success(Category.DATABASE, "Connection established", host="localhost", port=5432)
Logs.warn(Category.CACHE, "Hit rate low", rate=0.65)
Logs.error(Category.API, "Request failed", status=500, endpoint="/api/users")

# Exception Logging mit Traceback
try:
    raise ValueError("Something went wrong!")
except Exception as e:
    Logs.exception(Category.SYSTEM, "Critical error", e)

Discord Bot Usage

from logs import Logs, Category

# Bot Startup
Logs.banner("🤖 Discord Bot Starting", Category.BOT)
Logs.info(Category.INTENTS, "Configuring intents", guilds=True, members=True)
Logs.success(Category.GATEWAY, "Connected to Discord", latency="42ms")

# Cog Loading
with Logs.context("CogLoader"):
    Logs.success(Category.COGS, "Loaded cog", name="MusicCog", commands=12)
    Logs.warn(Category.COGS, "Warning", name="AdminCog", reason="Missing dependency")

# Command Execution
Logs.info(Category.SLASH_CMD, "Command invoked", command="/play", user="User#1234")
Logs.success(Category.VOICE, "Joined voice channel", channel="Music", members=5)

# Events
Logs.info(Category.EVENTS, "on_member_join", member="NewUser#5678")
Logs.info(Category.MESSAGE, "Message received", author="User#1234", channel="general")

# Moderation
Logs.warn(Category.MODERATION, "User kicked", user="BadUser#9999", reason="Spam")
Logs.error(Category.AUTOMOD, "AutoMod triggered", rule="No spam", action="timeout")

# Rate Limiting
Logs.warn(Category.RATELIMIT, "Rate limit hit", endpoint="/messages", retry_after=2.5)

# Sharding
Logs.info(Category.SHARDING, "Shard ready", shard_id=0, guilds=150, latency="42ms")

Advanced Features

# Performance Tracking
Logs.performance("database_query", Category.DATABASE)
# ... do work ...
duration = Logs.performance("database_query", Category.DATABASE)  # Returns duration in ms

# Context Manager
with Logs.context("UserRegistration"):
    Logs.info(Category.USER, "Registration started", email="user@example.com")
    Logs.success(Category.AUTH, "User authenticated")
    Logs.info(Category.EMAIL, "Verification email sent")

# Event Logging (für Analytics)
Logs.log_event("purchase_completed", Category.BUSINESS,
               order_id=12345, amount=99.99, currency="EUR")

# Distributed Tracing
Logs.set_correlation_id("req-abc-123-xyz")
Logs.set_trace_id("trace-456")
Logs.info(Category.API, "Processing request", endpoint="/api/users")
Logs.clear_tracing()

# Tabellen
Logs.table(Category.METRICS,
           ["Service", "Status", "Response Time"],
           [["API", "UP", "45ms"],
            ["Database", "UP", "12ms"],
            ["Cache", "DOWN", "N/A"]])

# Progress Bar
for i in range(1, 101):
    Logs.progress(Category.WORKER, i, 100, "Processing files")

🎨 Verfügbare Kategorien

Core System

API, DATABASE, SERVER, CACHE, AUTH, SYSTEM, CONFIG

Network & Communication

NETWORK, HTTP, WEBSOCKET, GRPC, GRAPHQL, REST, SOAP

Security & Compliance

SECURITY, ENCRYPTION, FIREWALL, AUDIT, COMPLIANCE, VULNERABILITY

Storage & Files

FILE, STORAGE, BACKUP, SYNC, UPLOAD, DOWNLOAD

Messaging & Events

QUEUE, EVENT, PUBSUB, KAFKA, RABBITMQ, REDIS

External Services

EMAIL, SMS, NOTIFICATION, PAYMENT, BILLING, STRIPE, PAYPAL

Monitoring & Observability

METRICS, PERFORMANCE, HEALTH, MONITORING, TRACING, PROFILING

Data Processing

ETL, PIPELINE, WORKER, CRON, SCHEDULER, BATCH, STREAM

Business Logic

BUSINESS, WORKFLOW, TRANSACTION, ORDER, INVOICE, SHIPPING

User Management

USER, SESSION, REGISTRATION, LOGIN, LOGOUT, PROFILE

AI & ML

AI, ML, TRAINING, INFERENCE, MODEL

DevOps & Infrastructure

DEPLOY, CI_CD, DOCKER, KUBERNETES, TERRAFORM, ANSIBLE

Testing & Quality

TEST, UNITTEST, INTEGRATION, E2E, LOAD_TEST

Third Party Integrations

SLACK, DISCORD, TWILIO, AWS, GCP, AZURE

Discord Bot Specific

BOT, COGS, COMMANDS, EVENTS, VOICE, GUILD, MEMBER, CHANNEL, MESSAGE, REACTION, MODERATION, PERMISSIONS, EMBED, SLASH_CMD, BUTTON, MODAL, SELECT_MENU, AUTOMOD, WEBHOOK, PRESENCE, INTENTS, SHARDING, GATEWAY, RATELIMIT

Development

DEBUG, DEV, STARTUP, SHUTDOWN, MIGRATION

🔒 Security Features

Sensitive Data Redaction

# Aktivieren
Logs.enable_redaction()

# Automatisch erkannte Patterns:
# - Kreditkarten (16 Digits)
# - SSN (XXX-XX-XXXX)
# - Passwörter (password=...)
# - API Keys (api_key=...)
# - Tokens (token=...)
# - Bearer Tokens

# Custom Pattern hinzufügen
Logs.add_redact_pattern(r'secret_code:\s*\S+')

# Deaktivieren
Logs.disable_redaction()

Remote Log Forwarding

# Zu Syslog/Logstash/etc. forwarden
Logs.enable_remote_forwarding("logserver.company.com", 514)

# Deaktivieren
Logs.disable_remote_forwarding()

📊 Monitoring & Health

Health Checks

# Health Status abrufen
health = Logs.health_check()
print(health)
# {
#     "status": "healthy",
#     "total_logs": 1523,
#     "error_count": 12,
#     "error_rate": 0.008,
#     "buffer_size": 0,
#     "file_size_mb": 2.5,
#     "remote_enabled": True,
#     "redaction_enabled": True,
#     ...
# }

# Schöne Ausgabe
Logs.print_health()

Statistiken

# Statistiken abrufen
stats = Logs.stats(detailed=True)

# Schöne Ausgabe
Logs.print_stats()

Prometheus Metrics

# Metrics exportieren
metrics = Logs.export_metrics_prometheus()
print(metrics)
# # HELP logs_total Total number of logs by level
# # TYPE logs_total counter
# logs_total{level="INFO"} 1234
# logs_total{level="ERROR"} 56
# ...

⚙️ Konfiguration

Vollständige Konfiguration

Logs.configure(
    enabled=True,
    show_timestamp=True,
    timestamp_format="%Y-%m-%d %H:%M:%S",
    min_level=LogLevel.DEBUG,
    log_file="app.log",
    colorize=True,
    format_type=LogFormat.STANDARD,  # SIMPLE, STANDARD, DETAILED, JSON
    show_metadata=False,              # Zeigt Datei:Zeile
    show_thread_id=False,
    auto_flush=True,
    max_file_size=10 * 1024 * 1024,  # 10MB
    backup_count=3,
    buffer_enabled=False,
    buffer_flush_interval=5.0,
    category_filter=None,             # Nur bestimmte Kategorien
    excluded_categories=[],           # Kategorien ausschließen
    sampling_rate=1.0,                # 0.0 - 1.0
    enable_redaction=True,
    enable_compression=True
)

Rate Limiting

# Max 500 Logs pro Minute
Logs.enable_rate_limiting(max_per_minute=500)

# Deaktivieren
Logs.disable_rate_limiting()

Sampling

# Nur 10% der Logs ausgeben
Logs.set_sampling_rate(0.1)

# Zurück auf 100%
Logs.set_sampling_rate(1.0)

Adaptive Logging

# Auto-Anpassung bei hoher Last
Logs.enable_adaptive_logging(noise_threshold=100)  # 100 logs/min

# Deaktivieren
Logs.disable_adaptive_logging()

🔍 Debug Tools

Tail - Letzte N Logs anzeigen

last_logs = Logs.tail(20)
for log in last_logs:
    print(log)

Grep - Logs durchsuchen

# Suche nach Pattern
errors = Logs.grep("error", case_sensitive=False, max_results=100)
for error in errors:
    print(error)

# Regex-Support
api_errors = Logs.grep(r"API.*ERROR", case_sensitive=False)

🎬 Session Recording

# Session starten
Logs.start_session()

# ... Logs werden aufgezeichnet ...

# Session stoppen und speichern
logs = Logs.stop_session(save_to="session.json")

🔔 Alert System

def email_alert(level, category, message):
    # Sende Email bei kritischen Fehlern
    send_email(f"ALERT: {level} in {category}: {message}")

# Alert-Handler registrieren
Logs.add_alert(LogLevel.FATAL, email_alert)
Logs.add_alert(LogLevel.ERROR, email_alert)

# Cooldown setzen (verhindert Spam)
Logs.set_alert_cooldown(300)  # 5 Minuten

🎨 Custom Farben

from colorama import Fore, Style

# Kategorie-Farben anpassen
Logs.configure_category_colors({
    "CUSTOM_CATEGORY": Fore.LIGHTMAGENTA_EX + Style.BRIGHT,
    Category.API: Fore.GREEN  # Überschreiben
})

🔧 Custom Handler

def custom_handler(level, category, message, metadata):
    # Sende zu externem System
    send_to_external_system({
        "level": level.name,
        "category": category,
        "message": message,
        "metadata": metadata
    })

# Handler hinzufügen
Logs.add_handler(custom_handler)

# Handler entfernen
Logs.remove_handler(custom_handler)

# Alle Handler entfernen
Logs.clear_handlers()

📝 Log-Formate

SIMPLE

[INFO] [API] Request received

STANDARD (Default)

[2024-01-15 14:30:45] [INFO] [API] Request received

DETAILED

[2024-01-15 14:30:45] [INFO] [API] [main.py:123] Request received

JSON

{"timestamp": "2024-01-15T14:30:45", "level": "INFO", "category": "API", "message": "Request received"}

🎯 Best Practices

1. Strukturierte Logs mit Key-Value Pairs

Logs.info(Category.API, "Request processed",
          method="POST",
          endpoint="/api/users",
          status=200,
          duration_ms=45.2,
          user_id=12345)

2. Context für zusammenhängende Operationen

with Logs.context("OrderProcessing"):
    Logs.info(Category.ORDER, "Order received", order_id=123)
    Logs.info(Category.PAYMENT, "Payment processing")
    Logs.success(Category.SHIPPING, "Shipment created")

3. Performance Tracking

@Logs.measure(Category.DATABASE)
def expensive_database_query():
    # ... query ...
    pass

4. Event-basiertes Logging

# Für Analytics/Business Intelligence
Logs.log_event("user_signup", Category.USER,
               user_id=123,
               plan="premium",
               referrer="google")

5. Correlation IDs für Microservices

# Am Anfang jedes Requests
Logs.set_correlation_id(request.headers.get('X-Correlation-ID'))

# Alle Logs in diesem Request haben jetzt die gleiche ID
Logs.info(Category.API, "Processing request")

📄 License

MIT License

🤝 Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

📞 Support

For issues and questions, please open an issue on GitHub.


Made with ❤️ for Python developers and Discord bot creators

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

simplecoloredlogs-1.0.6.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

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

simplecoloredlogs-1.0.6-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file simplecoloredlogs-1.0.6.tar.gz.

File metadata

  • Download URL: simplecoloredlogs-1.0.6.tar.gz
  • Upload date:
  • Size: 20.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for simplecoloredlogs-1.0.6.tar.gz
Algorithm Hash digest
SHA256 1282a635d470c0ef4dddebcb8beb1b935cb5ca0c499fba26cc22ed7af6ac42d7
MD5 e97965f4a2dc4eb1a2ef2c2f6354a133
BLAKE2b-256 1302c25cf5c56309df52c5ab77c9232cb1509c1bc08ed9afe7de9f221df7b7c0

See more details on using hashes here.

File details

Details for the file simplecoloredlogs-1.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for simplecoloredlogs-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 5c6bfef4d72f95f87be3e274a04cc74425e480491147572eee784e7d6955b029
MD5 5e7ac9809e160adc4475c64b35efa04f
BLAKE2b-256 2fb9fdba3c1cb16c274dc99d111e6ca156ec61dc090d004b7cd84e224450e76e

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