Rust के लिए लॉगिंग: सर्वश्रेष्ठ लाइब्रेरीज़ और उपकरण
\n\nलॉगिंग किसी भी गंभीर एप्लिकेशन के विकास का एक अनिवार्य हिस्सा है। Rust इकोसिस्टम में कई परिपक्व समाधान मौजूद हैं जो संदेश आउटपुट को लचीले ढंग से प्रबंधित करने, महत्व स्तर और प्रारूप निर्धारित करने की अनुमति देते हैं। इस लेख में हम Rust में लॉगिंग के लिए सबसे लोकप्रिय लाइब्रेरीज़, उनकी विशेषताओं की समीक्षा करेंगे और उपयोग के उदाहरण देंगे।
\n\n1. मूल ट्रेट log
\n\nलाइब्रेरी log (crate log) Rust में सभी लॉगिंग सिस्टम का आधार है। यह एक अमूर्त ट्रेट Log और मैक्रोज़ (info!, warn!, error!, debug!, trace!) प्रदान करती है। यह स्वयं डेटा आउटपुट नहीं करती - इसके लिए एक कार्यान्वयन (backend) की आवश्यकता होती है।
// Cargo.toml\n// [dependencies]\n// log = "0.4"\n\nuse log::{info, warn, error};\n\nfn main() {\n info!("एप्लिकेशन शुरू हुआ");\n warn!("कम मेमोरी शेष: {} MB", 128);\n error!("डेटाबेस से कनेक्शन में त्रुटि");\n}\n\nमहत्व के अनुसार लॉगिंग स्तर: trace, debug, info, warn, error। डिफ़ॉल्ट रूप से केवल info स्तर और उससे ऊपर के संदेश प्रदर्शित होते हैं।
2. env_logger — सरल और लोकप्रिय विकल्प
\n\nenv_logger ट्रेट Log का सबसे सामान्य कार्यान्वयन है। यह पर्यावरण चर RUST_LOG के माध्यम से कॉन्फ़िगर किया जाता है और संदेशों को मानक त्रुटि स्ट्रीम (stderr) में आउटपुट करता है।
// Cargo.toml\n// [dependencies]\n// log = "0.4"\n// env_logger = "0.10"\n\nuse log::info;\n\nfn main() {\n env_logger::init();\n info!("env_logger आरंभ किया गया");\n}\n\n// चलाने के लिए: RUST_LOG=info cargo run\n\nविशेषताएँ:
\n- \n
- न्यूनतम कॉन्फ़िगरेशन — एक पंक्ति
env_logger::init()पर्याप्त है। \n - मॉड्यूल के अनुसार फ़िल्टरिंग:
RUST_LOG=my_crate=debug,other_crate=info। \n - टर्मिनल में रंगीन आउटपुट के लिए समर्थन। \n
- छोटी उपयोगिताओं और प्रोटोटाइप के लिए आदर्श। \n
3. log4rs — अनुकूलन योग्य log4j/log4net एनालॉग
\n\nlog4rs (crate log4rs) एक शक्तिशाली फ्रेमवर्क है, जो Java log4j से प्रेरित है। यह YAML/JSON/TOML फ़ाइलों या प्रोग्रामेटिक रूप से लॉगिंग कॉन्फ़िगर करने की अनुमति देता है।
// Cargo.toml\n// [dependencies]\n// log = "0.4"\n// log4rs = "1.2"\n\nuse log::info;\n\nfn main() {\n // प्रोग्रामेटिक कॉन्फ़िगरेशन\n log4rs::init_file("log4rs.yaml", Default::default()).unwrap();\n info!("log4rs फ़ाइल के माध्यम से कॉन्फ़िगर किया गया");\n}\n\n// log4rs.yaml\n// refresh_rate: 30 seconds\n// appenders:\n// stdout:\n// kind: console\n// encoder:\n// pattern: "{d(%Y-%m-%d %H:%M:%S)} {l} - {m}{n}"\n// file:\n// kind: file\n// path: "app.log"\n// encoder:\n// pattern: "{d} {l} {t} - {m}{n}"\n// root:\n// level: info\n// appenders:\n// - stdout\n// - file\n\nविशेषताएँ:
\n- \n
- एकाधिक अपेंडर के लिए समर्थन (फ़ाइल, कंसोल, syslog, network में आउटपुट)। \n
- आकार या समय के अनुसार स्वचालित लॉग रोटेशन। \n
- मॉड्यूल, स्तर, कस्टम फ़िल्टर द्वारा फ़िल्टरिंग। \n
- सर्वर एप्लिकेशन और माइक्रोसर्विसेज़ के लिए अनुशंसित। \n
4. tracing — एसिंक्रोनस और संरचित लॉगिंग
\n\ntracing (crate tracing) एक आधुनिक विकल्प है, जिसे Tokio टीम द्वारा विकसित किया गया है। यह संरचित घटनाओं, निष्पादन समय को ट्रैक करने के लिए स्पैन (span) और एसिंक्रोनस संदर्भों का समर्थन करता है।
// Cargo.toml\n// [dependencies]\n// tracing = "0.1"\n// tracing-subscriber = "0.3"\n\nuse tracing::{info, span, Level};\nuse tracing_subscriber::fmt;\n\nfn main() {\n // subscriber आरंभ करना\n fmt::init();\n\n let span = span!(Lev