Информация об изменениях

Сообщение DefaultUncaughtExceptionHandler и тишина от 15.05.2015 13:51

Изменено 15.05.2015 13:58 mkind

Коллеги, добрый день!
(приложение является шаманской помесью swing + spring)
Устанавливаю UncaughtExceptionHandler потоку:
Thread.setDefaultUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler());


Класс представляет собой отсылку к логгеру:

public class DefaultUncaughtExceptionHandler implements UncaughtExceptionHandler {

    public static final Logger logger = LoggerFactory.getLogger(DefaultUncaughtExceptionHandler.class);

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        logger.error("Uncaught Exception detected in thread {}", t, e);
    }
}


Периодически ловлю в логе такую ошибку и следом за ней AWT поток начинает

[AWT-EventQueue-0] DefaultUncaughtExceptionHandler - Uncaught Exception detected in thread Thread[AWT-EventQueue-0,6,main]
java.lang.ArrayIndexOutOfBoundsException: null


И всё. Никак не удается вытащить stack trace побольше. Пробовал даже так (хотя и понимал, что не поможет)

public void uncaughtException(Thread t, Throwable e) {
        Set<Thread> threads = Thread.getAllStackTraces().keySet();
        StringBuilder builder = new StringBuilder();
        threads.forEach(thread -> builder.append(Arrays.toString(thread.getStackTrace())).append("\n"));
        logger.error("Uncaught exception in thread " + Thread.currentThread().getName()+ "\n" + builder.toString(), e);
    }


В коде никто явно не бросает ArrayIndexOutOfBoundsException, изучение всех возможных циклов тоже ничего не дал. Есть подозрение, что ошибка где-то глубже.

В IntelliJ IDEA можно создать Java Exception Brakepoint, который можно натравить на конкретный класс исключения, но проблема в том, что я не могу подключиться дебагом на работающие приложение.
Может быть, есть другие способы изощренного логирования?
Коллеги, добрый день!
(приложение является шаманской помесью swing + spring)
Устанавливаю UncaughtExceptionHandler потоку:
Thread.setDefaultUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler());


Класс представляет собой отсылку к логгеру:

public class DefaultUncaughtExceptionHandler implements UncaughtExceptionHandler {

    public static final Logger logger = LoggerFactory.getLogger(DefaultUncaughtExceptionHandler.class);

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        logger.error("Uncaught Exception detected in thread {}", t, e);
    }
}


Периодически ловлю в логе такую ошибку и следом за ней AWT поток начинает жутко тормозить:

[AWT-EventQueue-0] DefaultUncaughtExceptionHandler - Uncaught Exception detected in thread Thread[AWT-EventQueue-0,6,main]
java.lang.ArrayIndexOutOfBoundsException: null


И всё. Никак не удается вытащить stack trace побольше. Пробовал даже так (хотя и понимал, что не поможет)

public void uncaughtException(Thread t, Throwable e) {
        Set<Thread> threads = Thread.getAllStackTraces().keySet();
        StringBuilder builder = new StringBuilder();
        threads.forEach(thread -> builder.append(Arrays.toString(thread.getStackTrace())).append("\n"));
        logger.error("Uncaught exception in thread " + Thread.currentThread().getName()+ "\n" + builder.toString(), e);
    }


В коде никто явно не бросает ArrayIndexOutOfBoundsException, изучение всех возможных циклов тоже ничего не дал. Есть подозрение, что ошибка где-то глубже.

В IntelliJ IDEA можно создать Java Exception Brakepoint, который можно натравить на конкретный класс исключения, но проблема в том, что я не могу подключиться дебагом на работающие приложение.
Может быть, есть другие способы изощренного логирования?