C++ में लॉगिंग: सर्वश्रेष्ठ लाइब्रेरीज़ और समाधानों का अवलोकन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ के लिए लॉगिंग: सर्वश्रेष्ठ समाधान



लॉगिंग डेवलपर के शस्त्रागार में सबसे महत्वपूर्ण उपकरणों में से एक है। यह प्रोग्राम के निष्पादन को ट्रैक करने, त्रुटियाँ खोजने, प्रदर्शन का विश्लेषण करने और डीबगिंग के लिए डेटा एकत्र करने में मदद करता है। C++ भाषा में (Java या Python के विपरीत) कोई अंतर्निहित लॉगिंग सिस्टम नहीं है, लेकिन समुदाय और बड़ी कंपनियों ने कई उत्कृष्ट लाइब्रेरीज़ बनाई हैं। इस लेख में, हम C++ में लॉगिंग के लिए सर्वश्रेष्ठ समाधानों पर विचार करेंगे: spdlog, Boost.Log, Google glog और fmtlog। आप उनकी विशेषताओं, लाभों के बारे में जानेंगे और कोड उदाहरण प्राप्त करेंगे।



C++ में लॉगिंग की आवश्यकता क्यों है?

आधुनिक C++ प्रोजेक्ट्स में, लॉगिंग कई कार्यों को हल करती है:

  • डीबगिंग: वेरिएबल्स के मान, कॉल स्टैक, ऑब्जेक्ट्स की स्थिति रिकॉर्ड करना।
  • मॉनिटरिंग: फ़ंक्शंस, I/O संचालन के निष्पादन समय को रिकॉर्ड करना।
  • ऑडिट: उपयोगकर्ता या सिस्टम क्रियाओं का इतिहास संग्रहीत करना।
  • क्रैश डायग्नोस्टिक्स: अपवादों और गंभीर त्रुटियों को रिकॉर्ड करना।

एक अच्छी लॉगिंग लाइब्रेरी तेज़, लचीली होनी चाहिए, विभिन्न लॉग स्तरों (debug, info, warn, error, fatal) का समर्थन करती हो और डेटा को फ़ाइल, कंसोल या रिमोट सर्वर पर आउटपुट करने में सक्षम हो।



1. spdlog — तेज़ और आधुनिक लॉगर

spdlog वर्तमान में C++ में लॉगिंग के लिए सबसे लोकप्रिय लाइब्रेरी है। यह आधुनिक C++ (C++11/14/17) में लिखी गई है, header-only (केवल हेडर फ़ाइलें) है और स्ट्रिंग फ़ॉर्मेटिंग के लिए fmtlib के अलावा कोई बाहरी निर्भरता नहीं है। मुख्य लाभ:

  • उच्च प्रदर्शन (एसिंक्रोनस लॉगिंग)।
  • कई sinks का समर्थन: फ़ाइल, कंसोल, syslog, डेटाबेस।
  • फ़ॉर्मेटिंग का लचीला कॉन्फ़िगरेशन।
  • सरल API।

spdlog उपयोग का उदाहरण:

#include <spdlog/spdlog.h>#include <spdlog/sinks/basic_file_sink.h>

int main() { // एक लॉगर बनाएँ जो "logs.txt" फ़ाइल में लिखता है auto logger = spdlog::basic_logger_mt("file_logger", "logs.txt"); spdlog::set_default_logger(logger); spdlog::set_level(spdlog::level::debug); // लॉगिंग स्तर

spdlog::info("Welcome to spdlog!"); spdlog::debug("Some debug message: {}", 42); spdlog::error("Error occurred: {}", errno);

// एसिंक्रोनस लॉगिंग spdlog::flush_on(spdlog::level::err); return 0;}

spdlog एसिंक्रोनस मोड का भी समर्थन करता है, जो उच्च-लोड अनुप्रयोगों के लिए महत्वपूर्ण है। एसिंक्रोनस सेट करना सरल है: बस spdlog::init_thread_pool(...) को कॉल करें।



2. Boost.Log — शक्तिशाली, लेकिन भारी

Boost.Log Boost लाइब्रेरीज़ का हिस्सा है। यह सबसे अधिक कार्यात्मक समाधान है, लेकिन इसके लिए Boost की स्थापना की आवश्यकता होती है और यह संकलन को धीमा कर सकता है। विशेषताएँ:

  • अधिकतम लचीलापन: कस्टम फ़िल्टर, फ़ॉर्मेटर, sinks।
  • मल्टीथ्रेडिंग और थ्रेड सुरक्षा का समर्थन।
  • एक साथ विभिन्न स्थानों (फ़ाइल + कंसोल + नेटवर्क) पर लॉग लिखने की क्षमता।
  • आकार, तिथि या समय के अनुसार लॉग रोटेशन का समर्थन।

Boost.Log उदाहरण:

#include <boost/log/trivial.hpp>#include <boost/log/expressions.hpp>#include <boost/log/utility/setup/file.hpp>

namespace logging = boost::log;

int main() { // फ़ाइल में आउटपुट सेट करना logging::add_file_log("sample.log"); logging::core::get()->set_filter( logging::trivial::severity >= logging::trivial::info );

BOOST_LOG_TRIVIAL(trace) << "A trace severity message"; BOOST_LOG_TRIVIAL(debug) << "A debug severity message"; BOOST_LOG_TRIVIAL(error) << "An error severity message"; return 0;}

Boost.Log एक विकल्प है

अनुशंसाएँ