2010-11-11 11 views
12

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

क्या कोई ओपन सोर्स समाधान है जो यह करता है (log4j विशेष रूप से, या किसी अन्य जावा लॉगर्स के लिए)?

कुछ बातें हमारे appender है, और मैं एक विकल्प में देखना चाहेंगे:

  • लॉग्स अपवाद (! डुह)
  • डाटाबेस लेखन एक अलग थ्रेड/पूल से हैं

हमारा एपेंडर निम्नलिखित कॉलम का समर्थन करता है, और मैं उन सभी को देखना चाहता हूं जो हमें मिलते हैं।

  • LogId
  • समय
  • संदेश
  • स्टैकट्रेस
  • प्रक्रिया आईडी
  • धागा आईडी
  • मशीन नाम
  • घटक
  • स्तर (डिबग/जानकारी/चेतावनी दी है /। ..)
  • ThreadName

उत्तर

0

आप डेटाबेस के लिए लिखने के लिए log4jके लिए एक कस्टम appender जरूरत नहीं है। आप अपाचे के वितरण के साथ JDBCAppender बंडल का उपयोग कर सकते हैं।

एपैच के दस्तावेज़ीकरण के अनुसार, इस एपीआई को भविष्य में बदला जा सकता है। लेकिन अभी के लिए, हम इसका इस्तेमाल करते हैं और यह बहुत अच्छी तरह से काम करता है।

+0

यह दस्तावेज में लाल रंग में कहता है कि यह अपवाद लॉग नहीं करता है! – ripper234

+0

@ ripper234: मुझे पता है। आपने निर्दिष्ट नहीं किया है कि आपको अपवाद लॉग इन करने की आवश्यकता है ... :-) –

+3

आओ, गंभीरता से ... – ripper234

2

log4j द्वारा प्रदान की गई एक डीबीएपीएन्डर श्रेणी भी है (log4j को इस एपेंडर का उपयोग करके लॉग इन करने के लिए टेबल के एक विशिष्ट सेट की आवश्यकता होती है)। http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/db/DBAppender.html

वहाँ एक अद्यतन गैर अपाचे JDBC लकड़हारा यहाँ उपलब्ध तुम भी कोशिश करना चाहते हो सकता है: http://www.dankomannhaupt.de/projects/index.html

+0

क्या यह (संशोधित) आवश्यकताओं का उत्तर देता है? – ripper234

+0

यहां एपेंडर का स्रोत है: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/db/DBAppender.java?view = मार्कअप – Scott

+0

प्रक्रिया आईडी और मशीन नाम को गुणों के रूप में पारित किया जा सकता है यदि एक RewriteAppender में DBAppender परिभाषा घोंसला। RewriteAppender आपको नेस्टेड एपेंडर को ईवेंट पास करने से पहले एक रीवाइटपालिसी के माध्यम से लॉगिंग ईवेंट को संशोधित करने की अनुमति देता है। देखें: http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewriteAppender।एचटीएमएल और http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewritePolicy.html – Scott

1

बस उत्सुक है, यह गंभीर रूप से एक आवेदन पत्र में इस तरह के appender की मेजबानी के प्रदर्शन को प्रभावित नहीं होगा? जब आप इसे असीमित रूप से करते हैं तो भी रिलेशनल डेटाबेस में सीधे लॉगिंग करना काफी महंगा होता है।

+0

ठीक है, अगर आप DEBUG संदेशों को चालू करते हैं तो यह प्रदर्शन को प्रभावित कर सकता है। फिर भी, हम इसे बैचों में करते हैं, इसलिए प्रदर्शन पर असर तब तक बड़ा नहीं होता जब तक कि आप वाकई सैकड़ों लॉग संदेशों को पंप नहीं कर रहे हों। – ripper234

+0

हाँ, मैंने ऐसा सोचा। ध्यान दें कि स्टैक निशान बड़े हो सकते हैं। यदि आपका एप्लिकेशन लॉग प्रबंधन के लिए समर्पित है - डेटाबेस में सीधे काम करना ठीक है, लेकिन यदि यह वास्तविक काम करना है, तो डेटाबेस परत के साथ परेशानी एक स्केलेबल दृष्टिकोण IMHO प्रतीत नहीं होती है। मुझे नहीं लगता कि एक ओपन सोर्स एपेंडर है जैसे आप पूछ रहे हैं, एक नहीं देखा। एक बार जेडीबीसीएपेंडर नामक कुछ था, लेकिन यह गंभीर नहीं लग रहा था। यदि आप एक वाणिज्यिक उत्पाद में देखेंगे - लॉगफैस को देखें, यह बिल्कुल ठीक है लेकिन लॉग प्रबंधन से पूरी तरह से एक व्यापक दायरे और decouple आवेदन में। – Dima

+0

हमने मध्यम स्तर प्रणाली (लगभग 20 मशीनों) में पिछले तीन वर्षों से उत्पादन कोड में इस तरह के दृष्टिकोण का उपयोग किया है। अपने डेटा स्तर को मानना ​​"स्केलेबल पर्याप्त" है और आप बहुत से लॉग संदेश (आमतौर पर जानकारी और ऊपर) पंप नहीं करते हैं, मुझे लगता है कि नुकसान नुकसान से अधिक हैं। – ripper234

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