Rust के लिए लॉगिंग: सर्वश्रेष्ठ समाधान
लॉगिंग Rust में किसी भी गंभीर एप्लिकेशन का एक महत्वपूर्ण घटक है। यह कोड निष्पादन को ट्रैक करने, त्रुटियों की पहचान करने, प्रदर्शन की निगरानी करने और प्रोडक्शन में सिस्टम व्यवहार का विश्लेषण करने में मदद करता है। इस लेख में, हम Rust इकोसिस्टम में मुख्य लॉगिंग लाइब्रेरीज़, उनकी विशेषताओं, लाभों और उपयोग के उदाहरणों पर चर्चा करेंगे।
Rust में लॉगिंग क्यों महत्वपूर्ण है?
Rust, एक सिस्टम भाषा होने के नाते, विश्वसनीयता और पूर्वानुमान पर उच्च मांग रखता है। लॉगिंग निम्नलिखित की अनुमति देता है:
- मल्टीथ्रेडेड एप्लिकेशन में निष्पादन प्रवाह को ट्रैक करना।
- अप्रत्याशित स्थितियों और पैनिक को रिकॉर्ड करना।
- सुरक्षा ऑडिट करना।
- प्रदर्शन अनुकूलन के लिए मेट्रिक्स एकत्र करना।
लॉगिंग के लिए मुख्य लाइब्रेरीज़
1. log — लॉगिंग के लिए फ़ेसेड
log Rust में लॉगिंग के लिए एक मानक फ़ेसेड (एब्स्ट्रैक्ट लेयर) है। यह मैक्रोज़ info!, warn!, error!, debug!, trace! और ट्रेट Log को परिभाषित करता है। यह स्वयं लॉग आउटपुट नहीं करता है — इसके लिए एक बैकएंड (जैसे env_logger या slog) की आवश्यकता होती है।
// Cargo.toml[dependencies]log = "0.4"
// main.rsuse log::{info, warn, error};
fn main() { // बैकएंड का आरंभीकरण अनिवार्य है env_logger::init(); info!("एप्लिकेशन शुरू हुआ"); warn!("कम मेमोरी स्तर: {}%", 15); error!("गंभीर त्रुटि: {}", "कनेक्शन विफल");}2. env_logger — सरल और तेज़ बैकएंड
env_logger log के लिए सबसे लोकप्रिय बैकएंड है। इसे RUST_LOG एनवायरनमेंट वेरिएबल के माध्यम से कॉन्फ़िगर किया जाता है। यह मॉड्यूल और स्तरों के अनुसार फ़िल्टरिंग का समर्थन करता है।
// इंस्टॉलेशन// cargo add env_logger
// कॉन्फ़िगरेशन का उदाहरणuse log::LevelFilter;
fn main() { env_logger::Builder::from_env( env_logger::Env::default().default_filter_or("info") ).init();
log::info!("INFO स्तर के साथ शुरू"); log::debug!("यह संदेश प्रदर्शित नहीं होगा");}
// वेरिएबल के साथ चलाएँ:// RUST_LOG=debug cargo run3. slog — संरचित लॉगिंग
slog संरचित लॉगिंग के लिए एक शक्तिशाली लाइब्रेरी है। यह की-वैल्यू, लॉगर चेन, एसिंक्रोनस राइटिंग और कस्टम ड्राइवरों का समर्थन करता है। यह जटिल सिस्टम के लिए आदर्श है जहाँ संदर्भ महत्वपूर्ण है।
// Cargo.toml[dependencies]slog = "2.7"slog-term = "2.9"slog-json = "2.6"
// main.rsuse slog::{o, Drain, Logger, info};
fn main() { let decorator = slog_term::TermDecorator::new().build(); let drain = slog_term::FullFormat::new(decorator).build().fuse(); let drain = slog_async::Async::new(drain).build().fuse();
let logger = Logger::root(drain, o!("version" => "1.0"));
info!(logger, "सर्वर शुरू हुआ"; "port" => 8080, "env" => "production");}4. tracing — इंस्ट्रूमेंटेशन और ट्रेसिंग
tracing Tokio टीम की एक आधुनिक लाइब्रेरी है, जो संरचित लॉगिंग और ट्रेसिंग के लिए डिज़ाइन की गई है। यह स्पैन (span) — संदर्भ के साथ अस्थायी अंतराल — बनाने की अनुमति देता है, जो एसिंक्रोनस और मल्टीथ्रेडेड एप्लिकेशन के लिए अपरिहार्य है।
// Cargo.toml[dependencies]tracing = "0.1"tracing-subscriber = "0.3"
// main.rsuse tracing::{info, span, Level};use tracing_subscriber::fmt;
fn main() { // सब्सक्राइबर का आरंभीकरण fmt::init();
let span = span!(Level::INFO, "main", "app" = "my_service"); let _guard = span.enter();
info!("अनुरोध प्रसंस्करण"); // स्पैन के अंदर के लॉग स्वचालित रूप से संदर्भ शामिल करते हैं}लाइब्रेरीज़ की तुलना
- log + env_logger: सरलता, न्यूनतमता, छोटे प्रोजेक्ट के लिए उपयुक्त