Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Iterator;
- import java.util.Map;
- import javax.annotation.PostConstruct;
- import org.apache.commons.lang3.exception.ExceptionUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class UncaughtExceptionLogger {
- private final static Logger logger = LoggerFactory.getLogger(UncaughtExceptionLogger.class);
- @PostConstruct
- private void init() {
- Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
- public void uncaughtException(final Thread t, final Throwable e) {
- String msg = ExceptionUtils.getRootCauseMessage(e);
- logger.error(String.format("Uncaght exception handler captured expcetion '%s'", msg), e);
- if (msg.contains("unable to create new native thread")) {
- String dump = captureThreadDump();
- logger.error(String.format(
- "OutOfMemoryError has been captured for threads limit. Thread dump: \n %s", dump), e);
- }
- if (ExceptionUtils.getRootCause(e) instanceof OutOfMemoryError) {
- String dump = captureThreadDump();
- logger.error(String.format("OutOfMemoryError has been captured. Thread dump: \n %s", dump), e);
- }
- }
- });
- }
- public static String captureThreadDump() {
- /**
- * http://stackoverflow.com/questions/2787976/how-to-generate-thread-
- * dump-java-on-out-of-memory-error
- * http://henryranch.net/software/capturing-a-thread-dump-in-java/
- */
- Map<Thread, StackTraceElement[]> allThreads = Thread.getAllStackTraces();
- Iterator<Thread> iterator = allThreads.keySet().iterator();
- StringBuffer stringBuffer = new StringBuffer();
- while (iterator.hasNext()) {
- Thread key = (Thread) iterator.next();
- StackTraceElement[] trace = (StackTraceElement[]) allThreads.get(key);
- stringBuffer.append(key + "\r\n");
- for (int i = 0; i < trace.length; i++) {
- stringBuffer.append(" " + trace[i] + "\r\n");
- }
- stringBuffer.append("");
- }
- return stringBuffer.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement