मेरी वर्तमान परियोजना में मुझे त्रुटियों का पता लगाने के संबंध में समान आवश्यकता का सामना करना पड़ा। इस उद्देश्य के लिए मैंने निम्नलिखित दृष्टिकोण लागू किया है: मैं अपने ऐप में लॉगिंग के लिए log4j का उपयोग करता हूं, और हर जगह, जहां अपवाद पकड़ा जाता है, मैं मानक चीज करता हूं: log.error("Error's description goes here", e);
, जहां ई अपवाद को फेंक दिया जाता है (देखें log4j दस्तावेज के बारे में विवरण के लिए "लॉग" का प्रारंभिकरण)। क्रम त्रुटि का पता लगाने के लिए, मैं अपने खुद के appender, जो log4j AppenderSkeleton वर्ग फैली का उपयोग करें:
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
public class ErrorsDetectingAppender extends AppenderSkeleton {
private static boolean errorsOccured = false;
public static boolean errorsOccured() {
return errorsOccured;
}
public ErrorsDetectingAppender() {
super();
}
@Override
public void close() {
// TODO Auto-generated method stub
}
@Override
public boolean requiresLayout() {
return false;
}
@Override
protected void append(LoggingEvent event) {
if (event.getLevel().toString().toLowerCase().equals("error")) {
System.out.println("-----------------Errors detected");
this.errorsOccured = true;
}
}
}
log4j विन्यास फाइल अभी-अभी चयनित लकड़हारा के लिए नए appender की एक परिभाषा और उसके attachement (शामिल करने के लिए है मेरे मामले में रूट):
log4j.rootLogger = OTHER_APPENDERS, ED
log4j.appender.ED=com.your.package.ErrorsDetectingAppender
आप या तो अपने कार्यक्रमों के निष्पादन के प्रवाह में कुछ महत्वपूर्ण बिंदु पर ErrorsDetectingAppender की विधि errorsOccured() पर कॉल करें या संलग्न में अगर ब्लॉक करने के लिए कार्यक्षमता जोड़ कर तुरंत प्रतिक्रिया (कर सकते हैं) विधि । यह दृष्टिकोण अर्थशास्त्र के अनुरूप है: चीजें जिन्हें आप त्रुटियों पर विचार करते हैं और उन्हें लॉग इन करते हैं, का पता लगाया जाता है। यदि आप बाद में चयनित त्रुटियों पर विचार नहीं करेंगे, तो आप लॉगिंग स्तर को log.warn() में बदल दें और रिपोर्ट नहीं भेजी जाएगी।
स्रोत
2011-11-16 13:34:08
जावा 7 या नए के साथ काम करते समय आप http://stackoverflow.com/questions/95767/how-can-i-catch-awt-thread-exceptions-in-java?lq=1 के उत्तरों की जांच करना चाहेंगे – Suma