एक ही समस्या मैं कस्टम मूल्यांकनकर्ता लिखा है हल करने के लिए। यह 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>
दर-सीमित उन निराशाजनक रूप से मुश्किल समस्याओं में से एक है। अगर लॉगबैक के लिए इसका एक आसान समाधान था तो मुझे आश्चर्य होगा। – skaffman
@ स्काफमैन, क्या आप जटिलता की व्याख्या कर सकते हैं? मैं समझता हूं कि इससे कुछ असफलताओं को छुपाया जा सकता है, यदि कम-गंभीर त्रुटि के बाद कोई गंभीर त्रुटि उत्पन्न होती है। – notnoop