LogXide — Rust tabanlı, Python için 12,5 kat daha hızlı bir loglama framework'ü
(github.com/Indosaram)Merhaba, Python web uygulamaları ve veri pipeline'ları gibi yüksek yük altındaki ortamlarda dosya I/O ve loglama darboğazları yaşayanlar için LogXide'ı tanıtmak istiyorum.
1. Neden yapıldı? (The Problem)
Python'un varsayılan logging modülü saf Python ile yazılmıştır. Genel kullanımda yeterlidir; ancak trafiğin yoğunlaştığı anlarda veya büyük ölçekli loglama pipeline'larında, I/O işlemleri sırasında GIL'i (Global Interpreter Lock) tutarak tüm uygulamanın performansını düşürebilir.
2. Nasıl çözüldü? (Architecture)
LogXide, çekirdek mantığı ve handler'ları Rust ile yazıp PyO3 ile bağladı.
- Python-side Level Check:
FastLoggerWrapperkullanılarak, log seviyesi devre dışıysa (ör. INFO seviyesi ayarlıyken DEBUG çağrısı),PyObjectoluşturulmadan veya PyO3 sınırı aşılmadan Python tarafında anında yok sayılır. Bu optimizasyonla boş çağrılarda hız 2~5 kat arttı. - Non-blocking I/O: StreamHandler, HTTPHandler, OTLPHandler;
crossbeamkanalları ve arka plan thread'leri kullanarak logları asenkron işler. Ana uygulama thread'ini bloklamaz. - Senkron doğrudan write: FileHandler,
Mutex<BufWriter>kullanarak doğrudan OS I/O gerçekleştirir ve yalnızca gerektiğinde flush yaparak I/O ek yükünü son derece azalttı.
3. Başlıca benchmark sonuçları (macOS ARM64, Python 3.12 bazında)
- FileHandler: 2.09M msgs/sec (stdlib'deki 167K'ye kıyasla 12,5 kat daha hızlı)
- StreamHandler: 2.14M msgs/sec (stdlib'deki 11K'ye kıyasla 186 kat daha hızlı)
- C ile yazılmış
Picologging'den gerçek dosya biçimlendirme I/O'sunda %25 daha hızlı, saf Python olanStructlog'dan ise 2,4 kat daha hızlıdır.
4. Yerleşik özellikler ve kullanım
from logxide import logging satırını değiştirmeniz yeterlidir; mevcut logging.getLogger() kodunu aynen kullanabilecek şekilde tasarlanmıştır. Son dönem backend mimarisi trendlerine uygun olarak, aşağıdaki handler'lar Rust native seviyesinde yerleşik olarak sunuluyor:
- OTLPHandler: OpenTelemetry agent olmadan Protobuf tabanlı doğrudan gönderim
- HTTPHandler: batch halinde toplayıp gönderme özelliği
- SentryHandler: hata loglama için entegre destek (
pip install logxide[sentry]) - ColorFormatter: ANSI kontrol karakterleriyle terminalde renkli çıktı desteği
5. Net sınırlamalar (Trade-offs)
Değerlendirirken bunun %100 drop-in replacement olmadığını bilmeniz gerekir:
- Python ile yazılmış özel
logging.Handlersınıflarını kalıtım alıp kaydedemezsiniz. (En yüksek performansın korunması için yalnızca Rust ile implemente edilmiş yerleşik handler'lar kullanılmalıdır.) LoggerveyaLogRecordnesnelerini subclass edemezsiniz.- pytest ortamında, yerleşik
caplogyerine LogXide'ın sunduğucaplog_logxidefixture'ını kullanmanız gerekir.
Performans darboğazları nedeniyle C tabanlı logger'lar veya yapılandırılmış loglama kütüphaneleri arıyorsanız, bu çok iyi bir alternatif olacaktır. Django, FastAPI ve Flask'a doğrudan uygulanabilecek entegrasyon rehberleri de resmi belgelerde yer alıyor; inceleyip geri bildirim paylaşırsanız memnun olurum.
- Resmi belgeler: https://indosaram.github.io/logxide/
Henüz yorum yok.