2011-01-06 13 views
8

क्या कोई सी ++ लाइब्रेरी विशेष रूप से लॉग पार्सिंग (मल्टीलाइन घटनाओं को पहचानने में मदद करने के लिए) है? वेब पार्सिंग के लिए अपाचे लॉग या libcurl के लिए MergeLog की तरह?लॉग पार्सिंग के लिए सी ++ लाइब्रेरी

+0

हाँ, इसे boost :: regex कहा जाता है। –

+0

शायद मैक्सिम का सुझाव वास्तव में इस मामले के लिए पर्याप्त होगा। Boost.Xpressive अच्छे हालांकि, http://www.boost.org/doc/libs/1_36_0/doc/html/xpressive.html –

उत्तर

6

जब तक आप एक उपयुक्त पुस्तकालय पर ठोकर न लें, मेरी सलाह एक स्टैंडअलोन लेक्सर का उपयोग करना होगा।

  • फ्लेक्स + बाइसन के बजाय, flex alone (सी/सी ++) का उपयोग करें।
  • ocamllex + ocamlyacc के बजाय, ocamllex alone (ओकैमल) का उपयोग करें।
  • Ragel (सी/सी ++/उद्देश्य सी/डी/जावा/रूबी)।

इस तरह आप (वैसे भी तरह लॉग फ़ाइलों के लिए की व्यर्थ है जो) एक व्याकरण को परिभाषित करने के लिए और आप खतरनाक फ्रेंकस्टीन-regex-राक्षस कभी कभी अंधेरी जगहों में देखा से बचने के होने से बचने के।

2

मुझे किसी भी लॉग पार्सिंग पुस्तकालयों से अवगत नहीं है। आप हमेशा एक सामान्य उद्देश्य पार्सर जनरेटर का उपयोग कर सकते हैं, जैसे Boost.Spirit, ANTLR, या lex/yacc; वह दृष्टिकोण शायद अधिक काम करेगा, लेकिन यह बेहद लचीला है।

यदि एक पार्सर जेनरेटर ओवरकिल है, तो मैं सिर्फ लॉगफाइल पर बहुत सारे रेगेक्स फेंक दूंगा।

+0

धन्यवाद जोश, याक/लेक्स एक छोटे से भारी प्रोग्रामर पर लग रहा है लग रहा है। –

+0

आप पार्सर भाग को छोड़ सकते हैं और एक स्टैंडअलोन लेक्सर का उपयोग कर सकते हैं। यह अनियंत्रित regexes के एक गुच्छा से अधिक सुविधाजनक है और एक पूर्ण उड़ा पार्सर से आसान तरीका है। – bltxd

+0

@stack_zen: आत्मा, एएनटीएलआर, और लेक्स/yacc सभी एक ही भूमिका, अधिक या कम भरें। आत्मा और एएनटीएलआर अधिक आधुनिक और संभवतः सीखना आसान है। जैसा कि आपने कहा था, वे सभी थोड़ा भारी हो सकते हैं, लेकिन वे शक्तिशाली उपकरण हैं। –

संबंधित मुद्दे