1 puan yazan freedomzero 2026-03-26 | Henüz yorum yok. | WhatsApp'ta paylaş

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: FastLoggerWrapper kullanılarak, log seviyesi devre dışıysa (ör. INFO seviyesi ayarlıyken DEBUG çağrısı), PyObject oluş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; crossbeam kanalları 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 olan Structlog'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.Handler sı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.)
  • Logger veya LogRecord nesnelerini subclass edemezsiniz.
  • pytest ortamında, yerleşik caplog yerine LogXide'ın sunduğu caplog_logxide fixture'ı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.

Henüz yorum yok.

Henüz yorum yok.