मुझे यकीन नहीं है कि यह वही है जो आप खोज रहे हैं, लेकिन अपवादों के लिए एक हैंडलर है जो धागे को समाप्त करता है। यह किसी भी अपवाद के लिए एक हैंडलर है जो धागे के लक्ष्य से स्पष्ट रूप से पकड़ा नहीं जाता है।
डिफ़ॉल्ट "न आया हुआ अपवाद हैंडलर" बस System.err
को स्टैक ट्रेस मुद्रित करने के लिए Throwable
पर printStackTrace()
कहता है। हालांकि, अगर आप कर सकते थे replace अपनी खुद की UncaughtExceptionHandler
कि अपवाद लॉग बजाय log4j के साथ इस:
class Log4jBackstop implements Thread.UncaughtExceptionHandler {
private static Logger log = Logger.getLogger(Log4jBackstop.class);
public void uncaughtException(Thread t, Throwable ex) {
log.error("Uncaught exception in thread: " + t.getName(), ex);
}
}
आप एक निष्पादक ढांचे का उपयोग कर रहे हैं, तो करने के लिए जो आपको एक Runnable
वस्तु गुजरती हैं, इसके धागे शायद अपने स्वयं के catch
ब्लॉक को रोकने के लिए है बेजोड़ अपवाद हैंडलर तक पहुंचने से अपवाद। तुम वहाँ Runtime
अपवाद को पकड़ने के लिए चाहते हैं, एक तरह से करने के लिए वह इस तरह का प्रवेश आवरण में प्रत्येक कार्य रैप करने के लिए, यह है:
class Log4jWrapper {
private final Logger log;
private final Runnable target;
Log4jWrapper(Logger log, Runnable target) {
this.log = Objects.requireNonNull(log);
this.target = Objects.requireNonNull(target);
}
public void run() {
try {
target.run();
} catch(RuntimeException ex) {
log.error("Uncaught exception.", ex);
throw ex;
}
}
}
...
Runnable realTask = ...;
executor.submit(new Log4jWrapper(Logger.getLogger(Whatever.class), realTask));
क्या आपका मतलब है "ध्यान में न आया" RuntimeExceptions? –
हां मेरा मतलब है "बेकार" रनटाइम अपवाद – DkS