Rust के लिए लॉगिंग: सर्वश्रेष्ठ समाधान
लॉगिंग किसी भी production-एप्लिकेशन का एक प्रमुख घटक है। Rust इकोसिस्टम में टूल्स का एक परिपक्व सेट विकसित हुआ है जो लॉग के संग्रह, फ़ॉर्मेटिंग और आउटपुट को लचीले ढंग से कॉन्फ़िगर करने की अनुमति देता है। इस लेख में, हम मुख्य लाइब्रेरीज़, उनकी क्षमताओं और उपयोग के उदाहरणों पर चर्चा करेंगे।
1. क्रेट log — लॉगिंग पर अब्स्ट्रैक्शन
log लाइब्रेरी Rust में संपूर्ण लॉगिंग सिस्टम की नींव है। यह एक फ़ेसेड (facade) प्रदान करती है — ट्रेट्स और मैक्रोज़ का एक सेट जो किसी विशिष्ट बैकएंड पर निर्भर नहीं करता है। आप कोड एक बार लिखते हैं, और लॉग आउटपुट को बाहरी लॉगर के माध्यम से कॉन्फ़िगर करते हैं।
मुख्य मैक्रोज़:
error!— गंभीर त्रुटियाँwarn!— चेतावनियाँinfo!— सूचनात्मक संदेशdebug!— डीबग जानकारीtrace!— विस्तृत ट्रेसिंग
उपयोग का उदाहरण:
use log::{info, warn, error};
fn main() { // उपयोग से पहले लॉगर को इनिशियलाइज़ करना आवश्यक है // env_logger::init(); // या कोई अन्य बैकएंड info!("एप्लिकेशन शुरू हुआ"); warn!("डिस्क 90% भर गई है"); error!("DB कनेक्शन त्रुटि: {:?}", err);}2. env_logger — सरलता और लचीलापन
log के लिए सबसे लोकप्रिय बैकएंड। कॉन्फ़िगरेशन RUST_LOG एनवायरनमेंट वेरिएबल के माध्यम से होता है। यह छोटे प्रोजेक्ट्स और उपयोगिताओं के लिए एक आदर्श विकल्प है।
स्थापना:
[dependencies]log = "0.4"env_logger = "0.11"मॉड्यूल के अनुसार फ़िल्टरिंग के साथ उदाहरण:
use log::info;
fn main() { env_logger::init(); // चलाएँ: RUST_LOG=my_crate=info cargo run info!("यह संदेश केवल my_crate के लिए दिखाई देगा"); // RUST_LOG=warn — केवल warn और error दिखाएगा // RUST_LOG=debug — debug सहित सब कुछ दिखाएगा}RUST_LOG वेरिएबल जटिल फ़िल्टर का समर्थन करता है:
RUST_LOG=info— info स्तर और उससे ऊपरRUST_LOG=my_crate=debug,other_crate=warn— विभिन्न क्रेट्स के लिए अलग-अलग स्तरRUST_LOG=off— लॉगिंग बंद करें
3. log4rs — YAML के माध्यम से कॉन्फ़िगरेशन
यदि आपको उन्नत नियंत्रण चाहिए — कई अपेंडर (फ़ाइल, कंसोल, syslog), लॉग रोटेशन, फ़ॉर्मेटिंग — तो log4rs चुनें। यह Java Log4j से प्रेरित है।
log4rs.yaml कॉन्फ़िगरेशन का उदाहरण:
refresh_rate: 30 seconds
appenders: stdout: kind: console encoder: pattern: "{d(%Y-%m-%d %H:%M:%S)} [{l}] {m}{n}" file: kind: file path: "app.log" encoder: pattern: "{d} {l} {M} - {m}{n}"
root: level: info appenders: - stdout
loggers: app::db: level: debug appenders: - file additive: falseकोड में इनिशियलाइज़ेशन:
use log4rs;
fn main() { log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); log::info!("लॉगिंग YAML के माध्यम से कॉन्फ़िगर की गई"); log::debug!("यह संदेश केवल फ़ाइल में जाएगा");}log4rs की प्रमुख क्षमताएँ:
- आकार या समय के अनुसार लॉग रोटेशन
- विभिन्न मॉड्यूल के लिए अलग-अलग अपेंडर
- कॉन्फ़िगरेशन का स्वचालित पुनः लोड
- JSON फ़ॉर्मेट का समर्थन
4. tracing — आधुनिक दृष्टिकोण
Tokio टीम की tracing लाइब्रेरी केवल लॉगिंग नहीं है, बल्कि एप्लिकेशन के डायग्नोस्टिक्स के लिए एक संपूर्ण प्रणाली है। यह संरचित घटनाओं और स्पैन (span) का समर्थन करती है, जो विशेष रूप से एसिंक्रोनस एप्लिकेशन में उपयोगी है।
स्पैन के साथ उदाहरण:
use tracing::{in