में लॉग फ़ाइल लिखना मैं सी ++ में एक लॉग फ़ाइल लिखना चाहता हूं। मैं कुछ चीजों को संसाधित कर रहा हूं और इस प्रकार मुझे उन चीज़ों के गुणों का लॉग बनाए रखने की आवश्यकता है जिन्हें मैं संसाधित करता हूं ताकि मैं इस लॉग फ़ाइल पर वापस लौट सकूं जो विशेष रूप से मेरे लिए रूचि रखता है .. कोई मदद कर सकता है मुझे यह प्राप्त करने में?सी/सी ++
सी/सी ++
उत्तर
सभी प्रतिक्रियाओं के लिए धन्यवाद ... मुझे लगता है कि मैं जिस उत्तर की तलाश कर रहा था वह यह था कि यूटीएफ 8 में एक लॉग फ़ाइल के लिए प्रारूप भी एक txt फ़ाइल की तरह है, इसलिए सी को उस तरह के लिखने में कोई समस्या नहीं होगी सरल फ़ाइल लेखन के साथ फ़ाइल जो यह प्रदान करता है।
Apache log4cxx जैसे कई लॉगिंग फ्रेमवर्कों में से एक का उपयोग क्यों न करें? मैं खुद को रोल करने की कोशिश करने के बजाए इसका सुझाव दूंगा - पहिया का फिर से आविष्कार क्यों करें?
लॉगिंग की मानक विधि (मेरे अनुभव में) या तो stdout या stderr धाराओं का उपयोग करना है। C++ में इन उपयोग करने के लिए आप iostream शामिल करने की जरूरत है, और नीचे के रूप में प्रयोग करेंगे:
#include <iostream>
int main(int argc, char* argv[])
{
using std::cout;
using std::cerr;
using std::endl;
cout << "Output message" << endl;
cerr << "Error message" << endl;
}
लेकिन यह केवल उन लोगों के आउटपुट, जो आमतौर पर एक टर्मिनल पर खत्म करने के लिए मुद्रण प्राप्त होता है। यदि आप फ़ाइल में आउटपुट करने के लिए इन मानक स्ट्रीम विधियों (जो काफी पठनीय हैं) का उपयोग करना चाहते हैं, तो आपको किसी भी तरह अपने आउटपुट को रीडायरेक्ट करना होगा। ऐसा करने का एक तरीका है cstdio द्वारा प्रदत्त freopen
फ़ंक्शन का उपयोग करना। यह एक फ़ाइल खोलता है, और उस फ़ाइल को दिए गए स्ट्रीम को ले जाता है। दस्तावेज के लिए here देखें। एक उदाहरण होगा:
#include <iostream>
#include <cstdio>
int main(int argc, char* argv[])
{
using namespace std;
freopen("output.txt", "w", stdout);
freopen("error.txt", "w", stderr);
cout << "Output message" << endl;
cerr << "Error message" << endl;
}
(मैं सिर्फ संक्षिप्तता के लिए वहाँ using namespace std;
को बदल दिया है।)
आप output.txt को मानक आउटपुट धारा stdout
(जो cout
द्वारा प्रयोग किया जाता है) जा रहे हैं (लिखने के तरीके में), और आप stderr
(जिसे cerr
द्वारा उपयोग किया जाता है) को लिखने के तरीके में error.txt पर भी ले जा रहे हैं।
उम्मीद है कि यह चाल है।
मैं std :: cout और std :: cerr पर std :: clog की अनुशंसा करता हूं। –
मैंने इसका उल्लेख करने से पहले वास्तव में कभी भी क्लोग के बारे में कभी नहीं सुना होगा। मैं देख सकता हूं कि stderr का एक buffered संस्करण उपयोगी क्यों हो सकता है - लेकिन इसे cout के स्थान पर क्यों उपयोग करें? दोनों के साथ क्या गलत है? – VolatileStorm
तकनीकी रूप से? कुछ भी तो नहीं। लेकिन यह सामान्य लॉगिंग करने का मानक तरीका है। त्रुटि लॉगिंग के लिए सीर का उपयोग किया जाना चाहिए, और कंसोल आउटपुट के लिए cout। और ईमानदारी से? मैंने केवल एक सप्ताह पहले इसके बारे में सुना था। –
आप जिस चीज को करने की कोशिश कर रहे हैं, वह इस साइट पर एक संकल्प समाधान प्रदान करने के लिए बहुत अधिक है। आप क्या कर सकते हैं अपनी पसंद की लॉगिंग लाइब्रेरी के लिए प्रलेखन देखें। मेरे मामले में, यह Boost.Log
है, Boost C++ libraries के लिए एक लॉगिंग लाइब्रेरी जिसके लिए here पाया जा सकता है।
यह पृष्ठ के नीचे मैं सिर्फ इतना है कि
इस पुस्तकालय बूस्ट के एक अधिकारी हिस्सा नहीं है से लिंक किया है पर कहा है संग्रह पुस्तकालयों हालांकि यह समीक्षा बीत चुका है और अस्थायी रूप से स्वीकार किया गया है। समीक्षा परिणाम here उपलब्ध है।
तो आप जो करेंगे उसे बना लें।
आप भी http://www.logog.org पर विचार करना चाहेंगे। यह एक प्रदर्शन उन्मुख सी ++ लॉगिंग सिस्टम है। हालांकि, अगर यह आपके प्रोजेक्ट के लिए बहुत गहन है, तो इसके लिए अच्छा पुराना सीर और कॉउट ठीक काम करता है।
यह काफी आसान है, बस प्लग करेंकुछ सामान्य हेडर फाइल कार्यक्रम में कहीं से भी कहा जा
inline string getCurrentDateTime(string s){
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
if(s=="now")
strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct);
else if(s=="date")
strftime(buf, sizeof(buf), "%Y-%m-%d", &tstruct);
return string(buf);
};
inline void Logger(string logMsg){
string filePath = "/somedir/log_"+getCurrentDateTime("date")+".txt";
string now = getCurrentDateTime("now");
ofstream ofs(filePath.c_str(), std::ios_base::out | std::ios_base::app);
ofs << now << '\t' << logMsg << '\n';
ofs.close();
}
उपयोग (बेहतर दृष्टिकोण इन कार्यों के साथ एक वर्ग के रूप में किया जाएगा): लॉगर ("यह लॉग संदेश है"); एक फ़ाइल लिखता है (या मौजूदा फ़ाइल संलग्न कर देता है)
/somedir/log_2017-10-20.txt
सामग्री के साथ
:
2017-10-20 09:50:59 This is log message
- 1. सीसी
- 2. सीसी
- 3. कॉल/सीसी
- 4. सीसी .NET
- 5. मेल सीसी
- 6. ईएसएस/एमैक्स में, मैं सीसी सीजे या सीसी सीआर
- 7. कॉल/सीसी क्या है?
- 8. पीएचपी मेल, सीसी फील्ड
- 9. स्कैला में "कॉल-सीसी" पैटर्न?
- 10. लिनक्स कर्नेल संकलित करते समय सीसी, एलडी और सीसी [एम] आउटपुट जैसे कोड क्या हैं?
- 11. यह जावास्क्रिप्ट वाक्यविन्यास क्या है: {सीआई, सीसी}?
- 12. एफएफएमपीजी चार सीसी एवी कोडेक समर्थन सूची?
- 13. मेकफ़ाइल में सीसी? = क्या मतलब है?
- 14. पीट में डीपी और सीसी कैसे बदलते हैं?
- 15. मेकफ़ाइल में सीसी और एलडी क्या खड़े हैं?
- 16. सीपीएएन को बनाने के लिए पथ और सीसी
- 17. काम करने के लिए सीसी-ट्रे प्राप्त करना
- 18. कोनों को समायोजित करें और छवि को खोलें सीसी
- 19. mountainlion अप्रैल के रूप में इस 'सीसी' कमी
- 20. रिकर्सन लागू करने के लिए कॉल/सीसी का उपयोग करना संभव है?
- 21. Emacs: कैसे स्वचालित रूप से सीसी मोड डेरिवेटिव में कोलन के बाद खाली स्थान शामिल करने
- 22. क्या कोई कारण है कि Google अपनी ओपन सोर्स प्रोजेक्ट्स में सीपीपी के बजाय सीसी एक्सटेंशन का उपयोग करता है?
- 23. सीसी के लिए कोई रास्ता है: माइक्रोसॉफ्ट टीम फाउंडेशन सर्वर में किसी बग/वर्क आइटम पर कोई?
- 24. सिंक जीआईटी और क्लीयरकेस
- 25. संरचना कोड के बारे में तलाश स्पष्टीकरण cyclomatic जटिलता को कम करने के
- 26. क्या मैं .NET 4 कोड अनुबंधों का उपयोग कर सकता हूं और .NET 3.5 के साथ संगत रह सकता हूं?
- 27. मैं नेंट से क्रूज़ कंट्रोल
- 28. Ontology में कक्षाएं/उदाहरण
- 29. मेरी वेबसाइट में CCavenue भुगतान गेटवे को एकीकृत करने के लिए कैसे?
- 30. प्रतिलिपि
आप पूर्ववत करें/फिर प्रणाली के कुछ प्रकार की चर्चा करते हुए कर रहे हैं? – cyco130
एक नज़र डालें [इस पर] (http://stackoverflow.com/questions/696321/best-logging-framework-for-native-c) – StevieG
@ cyco130 मुझे लगता है कि ओपी का मतलब है "वापस" के बजाय "वापस देखें" वापस ", कुछ प्रकार के पूर्ववत/फिर से सिस्टम के बजाय। (शब्द "रिवर्ट" संभवतः गिट के साथ बहुत अधिक समय व्यतीत करने से लिया गया है!) – RoG