LogXide — Rust-basiertes Python-Logging-Framework, 12,5-mal schneller
(github.com/Indosaram)Hallo, ich möchte euch LogXide vorstellen – für alle, die in hoch ausgelasteten Umgebungen wie Python-Webanwendungen und Datenpipelines mit Engpässen bei Datei-I/O und Logging zu kämpfen haben.
1. Warum es entwickelt wurde (The Problem)
Das Standardmodul logging von Python ist in reinem Python geschrieben. In normalen Umgebungen ist das ausreichend, aber bei Traffic-Spitzen oder großen Logging-Pipelines belegt es während I/O-Operationen den GIL (Global Interpreter Lock) und kann dadurch die Gesamtleistung der Anwendung verschlechtern.
2. Wie das Problem gelöst wurde (Architecture)
LogXide implementiert die Kernlogik und die Handler in Rust und bindet sie über PyO3 an.
- Python-side Level Check: Mit
FastLoggerWrapperwerden Aufrufe sofort auf Python-Seite verworfen, wenn das Log-Level deaktiviert ist (z. B. ein DEBUG-Aufruf bei gesetztem INFO-Level) – ohnePyObject-Erzeugung oder das Überschreiten der PyO3-Grenze. Diese Optimierung beschleunigt leere Aufrufe um das 2- bis 5-Fache. - Nicht blockierendes I/O:
StreamHandler,HTTPHandlerundOTLPHandlerverarbeiten Logs asynchron übercrossbeam-Kanäle und Hintergrund-Threads. Der Haupt-Thread der Anwendung wird nicht blockiert. - Synchrones direktes Write: Im Fall von
FileHandlerwird mitMutex<BufWriter>direktes OS-I/O ausgeführt;flusherfolgt nur bei Bedarf, wodurch der I/O-Overhead drastisch reduziert wird.
3. Wichtige Benchmarks (macOS ARM64, Python 3.12)
- FileHandler: 2,09 Mio. msgs/sec (gegenüber 167K bei stdlib 12,5-mal schneller)
- StreamHandler: 2,14 Mio. msgs/sec (gegenüber 11K bei stdlib 186-mal schneller)
- Bei tatsächlichem Datei-Formatting-I/O ist es 25 % schneller als das in C geschriebene
Picologgingund 2,4-mal schneller als das reine Python-FrameworkStructlog.
4. Integrierte Funktionen und Nutzung
Die Struktur ist so ausgelegt, dass ihr mit nur einer Änderung auf from logxide import logging euren bestehenden logging.getLogger()-Code weiterverwenden könnt. Passend zu aktuellen Trends in der Backend-Architektur sind folgende Handler direkt auf Rust-Native-Niveau integriert:
- OTLPHandler: Protobuf-basierter Direktversand ohne OpenTelemetry-Agent
- HTTPHandler: Unterstützung für gebündeltes Senden per Batch
- SentryHandler: Integrierte Unterstützung für Error Logging (
pip install logxide[sentry]) - ColorFormatter: Unterstützung für farbige Terminalausgabe mit ANSI-Steuerzeichen
5. Klare Einschränkungen (Trade-offs)
Wenn ihr eine Einführung prüft, solltet ihr wissen, dass es kein 100%iges Drop-in-Replacement ist:
- Benutzerdefinierte
logging.Handler, die in Python geschrieben sind, können nicht per Vererbung registriert werden. (Für maximale Performance sollten nur die integrierten, in Rust implementierten Handler verwendet werden.) Logger- oderLogRecord-Objekte können nicht per Subclassing erweitert werden.- In pytest-Umgebungen muss statt des eingebauten
caplogdas von LogXide bereitgestellte Fixturecaplog_logxideverwendet werden.
Wenn ihr wegen Performance-Engpässen nach einem C-basierten Logger oder einer strukturierten Logging-Bibliothek gesucht habt, kann das eine hervorragende Alternative sein. In der offiziellen Dokumentation gibt es außerdem Integrationsleitfäden, die sich direkt für Django, FastAPI und Flask anwenden lassen. Schaut es euch gern an – Feedback ist sehr willkommen.
- Offizielle Dokumentation: https://indosaram.github.io/logxide/
Noch keine Kommentare.