2010-01-02 9 views
14

मैं लॉगबैक SMTPAppender ईमेल की दर को कैसे सीमित कर सकता हूं, ताकि यह मुझे हर n मिनट में एक बार ईमेल करे?लॉगबैक SMTPAppender सीमित दर

मैंने Logback appender के अनुसार अपना लॉगिंग सेटअप किया है, लेकिन मुझे यह नहीं लगता कि इसे कैसे कार्यान्वित किया जा सकता है या इसे लागू करने के लिए उप-वर्गीकृत किया गया है।

वहाँ एक छिपा सुविधा है? क्या किसी ने इसे संभालने के लिए सबक्लास विकसित किया था?

+1

दर-सीमित उन निराशाजनक रूप से मुश्किल समस्याओं में से एक है। अगर लॉगबैक के लिए इसका एक आसान समाधान था तो मुझे आश्चर्य होगा। – skaffman

+0

@ स्काफमैन, क्या आप जटिलता की व्याख्या कर सकते हैं? मैं समझता हूं कि इससे कुछ असफलताओं को छुपाया जा सकता है, यदि कम-गंभीर त्रुटि के बाद कोई गंभीर त्रुटि उत्पन्न होती है। – notnoop

उत्तर

6

प्रलेखन के आधार पर ऐसा प्रतीत होता है कि ऐसा करने का तरीका इवेंटएवल्यूलेटर लिखना है (उदाहरण 4.14 और 4.15 देखें) जो प्रत्येक घटना के लिए टाइम स्टैम्प को केवल एक ईवेंट स्वीकार करने के लिए देखता है जब "पर्याप्त समय" बीत चुका है अंतिम घटना स्वीकार कर ली गई थी।

तुम एक नंबर पर आप गणित कर सकते हैं पाने के लिए System.currentTimeMillis का उपयोग पर समय अंतर की गणना कर सकते हैं। http://java.sun.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis%28%29

0

मैं एक jira आइटम इस सुविधा का अनुरोध दायर करने की सलाह देते हैं। अगर केवल पूछा जाए तो इसे लागू किया जा सकता है।

6

रूप Thorbjorn, यह एक EventEvaluator कि दर है जिसके द्वारा एक appender संदेश आग की सीमा बनाने के लिए आसान है।

हालांकि, मैं Logback पाया DuplicateMessageFilter समर्थन करने के लिए, कि मेरी समस्या हल करती है शायद एक कड़वी तरह से: "। DuplicateMessageFilter गुण एक अलग प्रस्तुति इस फिल्टर डुप्लिकेट संदेशों का पता लगाता है, और repetitions की एक निश्चित संख्या से परे, दोहराया संदेशों चला जाता है।"

0

Btw,

Logback v0.9.26 अब SMTPAppender संदेश बफर के आकार को निर्धारित करने के लिए अनुमति देता है। कल तक यह बफर के वर्तमान contens भेज देगा जो 256 संदेशों तक था जो इमो को गर्दन में दर्द था क्योंकि मैं ईमेल में केवल अंतिम दिखाना चाहता था। इस प्रकार समय-समय पर आवर्ती ईमेल चेतावनियों को लागू करना अब संभव है जो इस प्रश्न की मेरी व्याख्या के अनुसार केवल एक विशेष त्रुटि लेते हैं।

http://logback.qos.ch/manual/appenders.html#cyclicBufferSize

मज़े।

1

एक ही समस्या मैं कस्टम मूल्यांकनकर्ता लिखा है हल करने के लिए। यह ch.qos.logback.classic.boolex.OnMarkerEvaluator फैली हुई है, लेकिन आप आधार के रूप में किसी अन्य मूल्यांकनकर्ता उपयोग कर सकते हैं। यदि मौन अंतराल मूल्यांकनकर्ता में कई स्वीकार्य संदेश इन्हें छोड़ देंगे। मेरे उपयोग के मामले में यह ठीक है, लेकिन अगर आपको अलग-अलग व्यवहार की ज़रूरत है - तो दूसरे को अतिरिक्त चेक जोड़ें।

public class LimitingOnMarkerEvaluator extends OnMarkerEvaluator { 

    private long lastSend = 0, interval = 0; 

    @Override 
    public boolean evaluate(ILoggingEvent event) throws EvaluationException { 
    if (super.evaluate(event)) { 
     long now = System.currentTimeMillis(); 

     if (now - lastSend > interval) { 
     lastSend = now; 
     return true; 
     } 
    } 

    return false; 
    } 


    public long getInterval() { 
    return interval; 
    } 

    public void setInterval(long interval) { 
    this.interval = interval; 
    } 

}

कॉन्फ़िग अधिकतम एक संदेश भेजने के लिए हर 1000 सेकंड (लगभग 17 मिनट):

<evaluator class="package.LimitingOnMarkerEvaluator"> 
    <marker>FATAL</marker> 
    <interval>1000000</interval> 
</evaluator> 
2

यह उपकरण वास्तव में आप क्या चाहते हैं क्या करना होगा, लेकिन यह बिल्कुल threadsafe नहीं कर रहा है: http://code.google.com/p/throttled-smtp-appender/wiki/Usage

मैंने एक थ्रेडसेफ संस्करण लिखा है लेकिन अभी तक इसे खोला नहीं है।

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

2

नया व्हिस्पर एपेंडर देखें। यह स्मार्ट दमन करता है। मेवेन और गीथब के माध्यम से उपलब्ध here

वैधानिक अस्वीकरण: मैं लेखक हूं।