C++ के लिए लॉगिंग: सर्वश्रेष्ठ समाधान
\nलॉगिंग किसी भी गंभीर C++ एप्लिकेशन के विकास का एक महत्वपूर्ण पहलू है। एक सही ढंग से कॉन्फ़िगर की गई लॉगिंग प्रणाली आपको प्रोग्राम की स्थिति को ट्रैक करने, त्रुटियों का पता लगाने, ऑडिट करने और production-वातावरण में डीबग करने की अनुमति देती है। सरल std::cout के विपरीत, पेशेवर लाइब्रेरीज़ महत्व स्तर (trace, debug, info, warn, error, fatal), फ़ाइल रोटेशन, एसिंक्रोनस राइटिंग और प्रदर्शन पर न्यूनतम प्रभाव प्रदान करती हैं। इस लेख में, हम C++ के लिए तीन सर्वश्रेष्ठ समाधानों पर विचार करेंगे: spdlog, Google glog और P7।
1. spdlog — तेज़ और आधुनिक लॉगर
\nspdlog एक हेडर-ओनली लाइब्रेरी है, जो C++11/14/17 में लिखी गई है। इसे C++ इकोसिस्टम में सबसे तेज़ लॉगर्स में से एक माना जाता है। मुख्य लाभ: एसिंक्रोनस मोड के लिए समर्थन, आउटपुट के कई प्रारूप (कंसोल, फ़ाइल, syslog, कस्टम), कंसोल के लिए रंगीन आउटपुट और न्यूनतम मेमोरी खपत।
\n\nबुनियादी उपयोग का उदाहरण:
\n#include "spdlog/spdlog.h"\n#include "spdlog/sinks/basic_file_sink.h"\n\nint main() {\n // फ़ाइल लॉगर बनाएं\n auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");\n // लॉगिंग स्तर सेट करें\n spdlog::set_level(spdlog::level::debug);\n\n // संदेश लॉग करें\n spdlog::info("एप्लिकेशन शुरू हुआ");\n file_logger->warn("उपयोगकर्ता {} ने गलत पासवर्ड से लॉगिन करने का प्रयास किया", "admin");\n file_logger->error("डेटाबेस कनेक्शन त्रुटि: {}", 404);\n\n // एसिंक्रोनस लॉगिंग\n spdlog::flush_every(std::chrono::seconds(3));\n return 0;\n}\n\nमुख्य विशेषताएं:
\n- \n
- प्रदर्शन: एसिंक्रोनस मोड में प्रति सेकंड 5-10 मिलियन संदेशों तक। \n
- लचीलापन: sink (आउटपुट) के लिए समर्थन — कंसोल, फ़ाइल, syslog, Telegram, Kafka। \n
- फ़ाइल रोटेशन: आकार या समय के अनुसार लॉग का स्वचालित निर्माण। \n
- रंगीन आउटपुट: त्वरित दृश्य निदान के लिए स्तर रंगीन होते हैं। \n
2. Google glog — समय-परीक्षित लॉगर
\nGoogle glog (glog) Google की एक लाइब्रेरी है, जो कंपनी की आंतरिक आवश्यकताओं के लिए विकसित की गई है। यह सरल, विश्वसनीय है और सर्वर एप्लिकेशन के लिए उपयुक्त है। मुख्य जोर लॉग के वर्गीकरण और फ़ाइलों में स्वचालित रिकॉर्डिंग पर है।
\n\nउपयोग का उदाहरण:
\n#include <glog/logging.h>\n\nint main(int argc, char* argv[]) {\n google::InitGoogleLogging(argv[0]);\n\n // फ़ाइल में आउटपुट सेट करें\n FLAGS_log_dir = "./logs";\n FLAGS_stderrthreshold = 1; // WARNING और उससे ऊपर को stderr में आउटपुट करें\n\n LOG(INFO) << "सर्वर पोर्ट " << 8080 << " पर शुरू हुआ";\n LOG(WARNING) << "कम मेमोरी: " << 512 << " MB";\n LOG(ERROR) << "कॉन्फ़िगरेशन फ़ाइल खोलने में विफल";\n\n // सशर्त लॉगिंग\n int x = 5;\n LOG_IF(INFO, x > 3) << "x, 3 से बड़ा है";\n\n google::ShutdownGoogleLogging();\n return 0;\n}\n\nglog की विशेषताएं:
\n- \n
- स्वचालित रोटेशन: फ़ाइलें दिन और आकार के अनुसार बनाई जाती हैं। \n
- सशर्त लॉगिंग: जाँच के लिए
LOG_IF,CHECK। \n - सिग्नल समर्थन: क्रैश होने पर स्वचालित रूप से स्टैक डंप लॉग करता है। \n
- न्यूनतम कॉन्फ़िगरेशन: "बॉक्स से बाहर" काम करता है। \n
3. P7 — उच्च-लोड सिस्टम के लिए लॉगर
\nP7 (या P7::Logger) एक लाइब्रेरी है, जो अधिकतम प्रदर्शन और एप्लिकेशन की विलंबता पर न्यूनतम प्रभाव पर केंद्रित है। यह एसिंक्रोनस कतार का उपयोग करता है और लॉक को कम करता है। यह गेम इंजन, वित्तीय प्रणालियों और