सबसे कुशल धागा-सुरक्षित C ++ लकड़हारा क्या है? [बन्द है]


85

मैं एक प्रदर्शन क्रिटिकल मल्टी थ्रेडेड एप्लिकेशन पर काम कर रहा हूं। मैंने रॉग, ऐस और बूस्ट लॉगिंग को देखा। मैंने रॉग चुना क्योंकि मैंने पढ़ा था कि यह सबसे तेज़ था (जब लॉगिंग अक्षम हो जाती है, तो इसमें सबसे कम ओवरहेड होता है)।

मेरे पास जो समस्या है, वह फ़ाइल नाम, लाइन नंबर आदि को रिलीज़ मोड में भी दिखाती है। यदि आप मुझे बता सकते हैं कि उस जानकारी को कैसे बंद किया जाए, तो मेरी समस्या हल हो सकती है। किसी भी मामले में मेरी स्थिति के लिए C ++ में सबसे कुशल लकड़हारा क्या है?


23
मैं तेजी से इस नतीजे पर पहुंच रहा हूं कि सब कुछ बढ़ा है। यहां तक ​​कि अगर यह नहीं है तो यह तब दिखाई देगा जब आप फिर से देखेंगे!
मार्टिन बेकेट

20
मैं नहीं देख सकता कि यह क्यों बंद है। उन्होंने एक विशिष्ट और एक औसत दर्जे का प्रश्न पूछा। यदि हम उपेक्षा करते हैं कि क्या संकलक का उपयोग किया जा रहा है, तो केवल एक "सबसे कुशल थ्रेड-सुरक्षित C ++ लॉगर" हो सकता है। Stackoverflow इन दिनों ....
JohnJohn


1
यह भी देखें github.com/gabime/spdlog
अधिकतम डिक

जवाबों:


35

दुर्भाग्य से मैं इस समय वोट देने में सक्षम नहीं हूं। जहाँ तक मैं कह सकता हूँ कि अपाचे log4cxx की तरह बकवास का उपयोग कभी नहीं कर सकता। इसमें गंभीर कीड़े होते हैं।

  1. 0.9 शाखा की अंतिम रिलीज 0.9.7 है और अभी भी मेमोरी लीक होती है क्योंकि आभासी सदस्यों वाले प्रत्येक वर्ग में कोई वर्चुअल डोर नहीं है।
  2. नवीनतम रिलीज़ 0.10.x ने 0.9.x से बहुत अधिक कार्यक्षमता खो दी है और पीछे की ओर संगत नहीं है। आपको अपने स्वयं के कोड को फिर से लिखने के लिए मजबूर किया जाता है।
  3. पूरा प्रोजेक्ट बेपर्दा लग रहा है। 2 साल के लिए 0.11.xx की रिहाई की घोषणा की गई है।

मेरी राय में आपको बढ़ावा देना चाहिए।


10
"आभासी सदस्यों के साथ हर वर्ग के पास कोई वर्चुअल डोर नहीं है" यह विश्वास नहीं करता था और इसे जांचना था। बेहद निराशाजनक अपाचे।
मैनुएल श्नाइड 3r

6
आप अब डाउनवोट कर सकते हैं :)
फंड मोनिका का मुकदमा

5
>> "आभासी सदस्यों के साथ हर वर्ग के पास कोई वर्चुअल डोर नहीं है" जबकि यह अद्भुत नहीं है, इसका मतलब यह नहीं है कि यह एक समस्या का कारण बनता है। यह केवल एक मुद्दा है अगर कक्षाएं उनके स्थिर प्रकार के बजाय उनके गतिशील द्वारा हटा दी जाती हैं। यह, अकेले, अपने आप में एक मुद्दा नहीं है और इसका मतलब यह नहीं है कि कोई भी मेमोरी लीक हुई है।
10

1
@evilrix कक्षाओं में आभासी सदस्य होते हैं लेकिन कोई वर्चुअल डोर नहीं होता है। वर्गों के पास निजी / नए ऑपरेटरों की सुरक्षा नहीं है। वास्तव में, यह एक बहुत ही खराब और खराब कोड है जिसे कभी जारी नहीं किया जाना चाहिए था। तो आपकी बात क्या है?
kirsche40

@ kirsche40 मुझे लगा कि मेरी बात बहुत स्पष्ट थी। मानक कैसे शब्द के बारे में मेरी व्याख्या में से कौन सा समझ में नहीं आया? मुझे फिर से वाक्यांश की अनुमति दें: यदि आप बेस क्लास पॉइंटर के माध्यम से हटाने का प्रयास करते हैं तो यह एक समस्या है। उस स्थिति में, यदि विध्वंसक आभासी नहीं है, तो व्यवहार अपरिभाषित है। इस बिंदु पर मानक असामान्य रूप से स्पष्ट है। मुझे पूरा यकीन है कि मैंने जो भी कहा था उसका कोई नहीं है मैं ओपी की वकालत कर रहा हूं इसे एक कार्यान्वयन के रूप में उपयोग करता है।
दुष्ट मैट्रिक्स

19

Pantheios को सबसे अच्छा प्रदर्शन करने वाली C ++ लॉगिंग लाइब्रेरी माना जाता है , साथ ही यह एकमात्र ऐसा दावा करने वाला है जो 100% सुरक्षित है ( संबंधित लेख के बारे में इस लेख को देखें कि क्यों प्रिंटफ़ () / iostream- आधारित लाइब्रेरी टाइप नहीं हैं- सुरक्षित)


4
और भले ही वे Pantheios पसंद न करें, आपके द्वारा लिंक किए गए पृष्ठ पर 'प्रतियोगियों' की सूची जानकारीपूर्ण है।
jwd

10

मुझे http://log.apache.org/log4cxx/index.html पर log4cxx के साथ सफलता मिली है । यह लोकप्रिय Log4j लकड़हारा का C ++ संस्करण है, यह एक फ़ाइल या कोड के माध्यम से कॉन्फ़िगर करना आसान है। जब यह अक्षम हो जाता है तो ओवरहेड न्यूनतम होता है (विधि कॉल और पूर्णांक तुलना)।

लॉग में आउटपुट के लिए पैटर्न एक रूपांतरण पैटर्न द्वारा परिभाषित किया जाता है जो दिनांक / समय और संदेश के समान सरल हो सकता है। यह फ़ाइल आकार सीमा, रोलओवर आदि को भी संभालता है। आप विभिन्न त्रुटियों और स्रोतों के लिए विभिन्न पैटर्न भी कॉन्फ़िगर कर सकते हैं।


9

यहां बताया गया है कि आप उस अतिरिक्त जानकारी को कैसे बंद कर सकते हैं, जो रोक देता है (जैसे फ़ाइल नाम, लाइन नंबर आदि)। जब आप अपने main()फ़ंक्शन (या जहां भी) में आरओएल को आरंभीकृत करते हैं , आप निम्नलिखित कार्य कर सकते हैं:

rlog::RLogInit(argc, argv);
rlog::StdioNode slog (2, rlog::StdioNode::OutputColor);
slog.subscribeTo( RLOG_CHANNEL("error") );

दूसरा तर्क StdioNodeझंडे के लिए आउटपुट को नियंत्रित करने के लिए है। संभावित झंडों की पूरी सूची के लिए रॉग डॉक्यूमेंटेशन (Doxygen के साथ उत्पन्न किया जा सकता है) की जाँच करें। यहाँ उदाहरण में से कोई भी अन्य जानकारी के बिना, केवल गंभीरता के अनुसार आउटपुट को रंगीन बनाता है।


9

आप लॉगॉग सिस्टम पर विचार करना चाह सकते हैं। logog बिल्कुल इस तरह की कार्यक्षमता प्रदान करता है लेकिन इसमें निहित कोड निर्भरता नहीं है जो कि Pantheios के पास है। लॉगॉग थ्रेड सुरक्षित है और यह किसी भी बिंदु पर किस प्रकार के संदेशों को लॉग करता है, इस पर एक उच्च डिग्री नियंत्रण की अनुमति देता है।

मैं लोगो का लेखक और अनुचर हूं, इसलिए मेरी राय थोड़ी पक्षपाती है। लेकिन मैंने इसे लागू करने से पहले रॉग, पैंटहिओस और अन्य लॉगिंग सिस्टम की समीक्षा की।

https://github.com/johnwbyrd/logog


अद्यतन लिंक, नोट के लिए धन्यवाद।
जॉन्हबीरड

4

ओवरहेड में से कुछ आपके मैक्रोज़ / स्ट्रीम में हो सकते हैं। लॉगिंग अक्षम होने पर आपको स्ट्रिंग की रचना नहीं करने के लिए बहुत सावधानी बरतने की आवश्यकता है।

धाराओं का चतुर उपयोग ?: ऑपरेटर आपको वैसा करने की अनुमति देता है, जैसा कि मैक्रोज़ करते हैं।



2

शायद पेंटीहोस
हालांकि मुझे नहीं पता कि यह धागा-सुरक्षित है या नहीं ...


8
यह धागा-सुरक्षित है
dcw

2

C-log lib की कोशिश करें , https://github.com/0xmalloc/c-log , C / C ++ भाषा के लिए एक तेज़, स्थिर और थ्रेड-सुरक्षित लॉग लिब।


8
दुर्भाग्य से सी-लॉग जीपीएल के तहत है, जिसका अर्थ है कि आप इसे गैर-जीपीएल संगत (जैसे मालिकाना वाणिज्यिक) सॉफ़्टवेयर के साथ उपयोग नहीं कर सकते। यह कई उपयोगकर्ताओं के लिए बेकार है।
क्रिस

अब github.com/0xmalloc/c-log में कोई LICENSE नहीं है, यह वाणिज्यिक और व्यक्तिगत उपयोग के लिए मुफ़्त है।
user2538508

2
क्या आप सी-लॉग के लेखक हैं? यदि हां, तो मैं आपको स्पष्ट रूप से बताता हूं कि (गिथब पृष्ठ पर, रीडमी फ़ाइल और स्रोत कोड में टिप्पणियां) किस लाइसेंस के तहत आपका सॉफ़्टवेयर जारी किया गया है। यहां तक ​​कि अगर यह सार्वजनिक डोमेन होने का मतलब है (जो मैं अनुशंसा नहीं करता!), तो आपको स्पष्ट रूप से यह बताना चाहिए। कहा जा रहा है कि, चुनने के लिए कई "वाणिज्यिक-अनुकूल" (यानी अनुमेय) खुले स्रोत लाइसेंस हैं - सबसे लोकप्रिय अपाचे, बीएसडी या एमआईटी हैं।
क्रिस

केवल लिनक्स? ( #include <pthread.h>...)
rustyx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.