C++ में लॉगिंग: शुरुआती लोगों के लिए सर्वोत्तम अभ्यास

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

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

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

C++ अनुप्रयोगों में लॉगिंग: शुरुआती लोगों के लिए सर्वोत्तम अभ्यास



लॉगिंग (जर्नलिंग) प्रोग्राम के निष्पादन के दौरान होने वाली घटनाओं को रिकॉर्ड करने की प्रक्रिया है। एक शुरुआती C++ डेवलपर के लिए, लॉगिंग को सही ढंग से व्यवस्थित करने की क्षमता केवल "अच्छा शिष्टाचार" नहीं है, बल्कि एक महत्वपूर्ण कौशल है। यह कोड को डीबग करने, उत्पादन में त्रुटियों को ट्रैक करने और सिस्टम के व्यवहार का विश्लेषण करने में मदद करता है। इस लेख में, हम C++ में लॉगिंग के सर्वोत्तम अभ्यासों पर चर्चा करेंगे, सबसे सरल तरीकों से लेकर आधुनिक लाइब्रेरी के उपयोग तक, कोड के विशिष्ट उदाहरणों के साथ।



सरल std::cout का उपयोग करना एक खराब अभ्यास क्यों है?



कई नौसिखिए std::cout या printf के माध्यम से डीबग संदेश आउटपुट करना शुरू करते हैं। यह तेज़ और सरल है, लेकिन इस दृष्टिकोण में गंभीर कमियां हैं:



  • महत्व स्तरों का अभाव। त्रुटि संदेशों को सूचनात्मक सूचनाओं से अलग नहीं किया जा सकता।
  • फ़िल्टर करने में कठिनाई। उत्पादन में, आप टनों डीबग संदेश नहीं देखना चाहते, जबकि डीबगिंग के दौरान उनकी आवश्यकता होती है।
  • कोई फ़ाइल रोटेशन नहीं। लॉग फ़ाइल अनिश्चित काल तक बढ़ती रहेगी जब तक कि वह पूरी डिस्क को भर न दे।
  • मल्टीथ्रेडिंग समस्याएं। विभिन्न थ्रेड्स से आउटपुट आपस में मिल सकता है।


इसके बजाय, विशेष उपकरणों का उपयोग किया जाना चाहिए। आइए तीन मुख्य दृष्टिकोणों पर विचार करें: सरल से जटिल तक।



1. शुरुआती लोगों के लिए सरल मैक्रो रैपर



यदि आप एक छोटा शैक्षिक प्रोग्राम लिख रहे हैं या तृतीय-पक्ष लाइब्रेरी शामिल नहीं करना चाहते हैं, तो आप मैक्रोज़ पर एक सरल रैपर बना सकते हैं। यह नंगे cout से बेहतर है।



#include <iostream>#include <fstream>#include <ctime>#include <string>

enum LogLevel { DEBUG, INFO, WARNING, ERROR};

std::string getCurrentTime() { std::time_t now = std::time(nullptr); char buf[20]; std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", std::localtime(&now)); return std::string(buf);}

#define LOG(level, msg) \ do { \ std::ofstream logFile("app.log", std::ios::app); \ logFile << "[" << getCurrentTime() << "] " \ << "[" << #level << "] " \ << msg << std::endl; \ } while(0)

int main() { LOG(INFO, "प्रोग्राम प्रारंभ हुआ"); int x = 42; LOG(DEBUG, "x का मान: " << x); // ... LOG(ERROR, "शून्य से विभाजन त्रुटि हुई"); return 0;}


लाभ: सरलता, बाहरी निर्भरता की आवश्यकता नहीं है।

नुकसान: कोई रोटेशन नहीं, धीमा प्रदर्शन (प्रत्येक संदेश के लिए फ़ाइल खोलना/बंद करना), थ्रेड समस्याएं।



2. spdlog लाइब्रेरी का उपयोग (शुरुआती लोगों के लिए अनुशंसित)



spdlog C++ में लॉगिंग के लिए सबसे लोकप्रिय लाइब्रेरी है (GitHub पर 23,000 से अधिक स्टार)। यह बहुत तेज़, उपयोग में सरल और header-only (केवल हेडर फ़ाइलें) है।



स्थापना: बस रिपॉजिटरी से फ़ाइलें डाउनलोड करें या vcpkg/conan का उपयोग करें।



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

int main() { // रंगीन आउटपुट के साथ कंसोल लॉगर बनाएं auto console = spdlog::stdout_color_mt("console"); // फ़ाइल लॉगर बनाएं auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log"); // लॉगिंग स्तर सेट करें spdlog::set_level(spdlog::level::debug); // DEBUG और उससे ऊपर के सभी को लॉग करें // विभिन्न स्तरों के संदेशों के उदाहरण console->trace("यह trace संदेश है (सबसे निचला स्तर)"); console->debug("डीबग संदेश: चर x = {}", 42); console->info("प्रोग्राम सफलतापूर्वक प्रारंभ हुआ"); console->warn("प

ब्लॉग

पुस्तक अनुशंसाएँ