LogXide — Rust-आधारित Python logging framework, 12.5 गुना तेज
(github.com/Indosaram)नमस्ते, यह LogXide उन लोगों के लिए है जो Python web applications और data pipelines जैसे high-load environments में file I/O और logging bottleneck का सामना कर रहे हैं.
1. इसे क्यों बनाया गया (The Problem)
Python का बेसिक logging module pure Python में लिखा गया है. सामान्य वातावरण में यह पर्याप्त है, लेकिन traffic spike वाले सेक्शन या बड़े logging pipelines में I/O कार्यों के दौरान यह GIL(Global Interpreter Lock) को पकड़कर रखता है, जिससे पूरे application की performance घट सकती है.
2. इसे कैसे हल किया गया (Architecture)
LogXide का core logic और handlers Rust में लिखे गए हैं और PyO3 से bind किए गए हैं.
- Python-side Level Check:
FastLoggerWrapperरखा गया है ताकि जब log level disabled हो (उदाहरण: INFO level सेट होने पर DEBUG call), तोPyObjectcreation या PyO3 boundary पार किए बिना Python side पर ही तुरंत उसे ignore कर दिया जाए. इस optimization से empty calls की speed 2~5 गुना बेहतर हुई. - Non-blocking I/O: StreamHandler, HTTPHandler, OTLPHandler
crossbeamchannels और background threads का उपयोग करके logs को asynchronously process करते हैं. इससे main application thread block नहीं होता. - Synchronous direct write: FileHandler के मामले में
Mutex<BufWriter>का उपयोग करके सीधे OS I/O किया जाता है, और केवल जरूरत पड़ने पर ही flush किया जाता है, जिससे I/O overhead बेहद कम हो जाता है.
3. प्रमुख benchmarks (macOS ARM64, Python 3.12 के आधार पर)
- FileHandler: 2.09M msgs/sec (stdlib के 167K की तुलना में 12.5 गुना तेज)
- StreamHandler: 2.14M msgs/sec (stdlib के 11K की तुलना में 186 गुना तेज)
- C में लिखे गए
Picologgingकी तुलना में वास्तविक file formatting I/O में 25% अधिक तेज, और pure PythonStructlogकी तुलना में 2.4 गुना तेज.
4. बिल्ट-इन features और उपयोग
सिर्फ from logxide import logging में एक लाइन बदलने से existing logging.getLogger() code को लगभग वैसे ही इस्तेमाल किया जा सकता है. हालिया backend architecture trends के अनुसार, निम्न handlers Rust native स्तर पर built-in दिए गए हैं:
- OTLPHandler: OpenTelemetry agent के बिना Protobuf-आधारित direct transmission
- HTTPHandler: batch करके भेजने की सुविधा
- SentryHandler: error logging integration support (
pip install logxide[sentry]) - ColorFormatter: ANSI control characters का उपयोग करके terminal color output support
5. स्पष्ट सीमाएँ (Trade-offs)
इसे अपनाने पर यह जानना जरूरी है कि यह 100% drop-in replacement नहीं है:
- Python में लिखे गए custom
logging.Handlerको inherit करके register नहीं किया जा सकता. (सर्वोत्तम performance बनाए रखने के लिए Rust में implemented built-in handlers ही उपयोग करने होंगे). LoggerयाLogRecordobjects को subclass नहीं किया जा सकता.- pytest environment में built-in
caplogकी जगह LogXide द्वारा दिया गयाcaplog_logxidefixture इस्तेमाल करना होगा.
अगर आप performance bottleneck की वजह से C-based logger या structured logging library खोज रहे थे, तो यह एक शानदार विकल्प हो सकता है! Django, FastAPI, Flask पर सीधे लागू किए जा सकने वाले integration guides भी official docs में शामिल हैं, इसलिए एक बार देखिए और feedback दें तो आभार होगा.
- आधिकारिक दस्तावेज़: https://indosaram.github.io/logxide/
अभी कोई टिप्पणी नहीं है.