LogXide — Framework logging Python berbasis Rust yang 12,5x lebih cepat
(github.com/Indosaram)Halo, saya ingin memperkenalkan LogXide untuk Anda yang mengalami bottleneck file I/O dan logging di lingkungan berbeban tinggi seperti aplikasi web Python dan data pipeline.
1. Alasan dibuat (The Problem)
Modul logging bawaan Python ditulis dengan Python murni. Dalam lingkungan umum itu sudah memadai, tetapi pada titik dengan lonjakan trafik atau pipeline logging berskala besar, modul ini dapat memegang GIL (Global Interpreter Lock) selama operasi I/O dan menjadi penyebab turunnya performa seluruh aplikasi.
2. Bagaimana cara mengatasinya (Architecture)
LogXide menulis logika inti dan handler dalam Rust lalu mengikatnya dengan PyO3.
- Python-side Level Check: Dengan menambahkan
FastLoggerWrapper, ketika level log tidak aktif (misalnya pemanggilan DEBUG saat level disetel ke INFO), log langsung diabaikan di sisi Python tanpa pembuatanPyObjectatau melewati batas PyO3. Optimasi ini meningkatkan kecepatan 2~5x pada pemanggilan kosong. - I/O non-blocking:
StreamHandler,HTTPHandler, danOTLPHandlermemproses log secara asinkron menggunakan kanalcrossbeamdan thread latar belakang. Ini tidak memblokir thread utama aplikasi. - Penulisan langsung sinkron: Untuk
FileHandler, LogXide menggunakanMutex<BufWriter>untuk melakukan I/O OS secara langsung, dan hanya melakukan flush saat diperlukan sehingga overhead I/O bisa ditekan secara ekstrem.
3. Benchmark utama (berdasarkan macOS ARM64, Python 3.12)
- FileHandler: 2.09M msgs/sec (dibanding stdlib 167K, 12,5x lebih cepat)
- StreamHandler: 2.14M msgs/sec (dibanding stdlib 11K, 186x lebih cepat)
- Dalam I/O formatting file nyata, performanya 25% lebih cepat daripada
Picologgingyang ditulis dalam C, dan 2,4x lebih cepat daripadaStructlogyang berbasis Python murni.
4. Fitur bawaan dan cara penggunaan
Strukturnya dirancang agar Anda bisa tetap memakai kode logging.getLogger() yang ada hanya dengan mengubah satu baris menjadi from logxide import logging. Sesuai tren arsitektur backend terbaru, handler berikut sudah dibangun langsung pada level native Rust:
- OTLPHandler: Pengiriman langsung berbasis Protobuf tanpa agen OpenTelemetry
- HTTPHandler: Fitur pengiriman terkelompok (Batch)
- SentryHandler: Dukungan integrasi error logging (
pip install logxide[sentry]) - ColorFormatter: Dukungan output warna terminal menggunakan karakter kontrol ANSI
5. Batasan yang jelas (Trade-offs)
Saat mempertimbangkan adopsi, perlu diketahui bahwa ini bukan 100% drop-in replacement:
- Anda tidak bisa mewarisi dan mendaftarkan
logging.Handlerkustom yang ditulis dalam Python. (Performa tertinggi hanya dipertahankan jika menggunakan handler bawaan yang diimplementasikan dalam Rust). - Anda tidak bisa melakukan subclassing pada objek
LoggeratauLogRecord. - Di lingkungan pytest, Anda harus menggunakan fixture
caplog_logxideyang disediakan LogXide alih-alihcaplogbawaan.
Jika Anda mencari logger berbasis C atau library structured logging karena bottleneck performa, ini bisa menjadi alternatif yang sangat baik! Panduan integrasi yang bisa langsung diterapkan ke Django, FastAPI, dan Flask juga sudah disertakan dalam dokumentasi resmi, jadi silakan lihat dan saya akan sangat berterima kasih atas masukan Anda.
- Dokumentasi resmi: https://indosaram.github.io/logxide/
Belum ada komentar.