Мой аспект регистрации исключений состоит в том, чтобы регистрировать одно и то же исключение дважды

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

В результате каждое исключение оборачивается в исключение времени выполнения, а затем создается для регистрации в другой части приложения. Я использую теги aop: config, чтобы создать аспект для регистрации исключений времени выполнения, которые выдает остальная часть приложения. Затем исключение передаст стек вызовов UncaughtExceptionHandler, чтобы завершить исключение в режиме без вывода сообщений. Однако одно и то же исключение неоднократно перехватывается и регистрируется (каждое исключение записывается отдельным потоком и отправляется в отдельный файл журнала). В отладчике оба исключения имеют одинаковый идентификатор.

Мое applicationContext является основным для этого:

    <АОП: конфигурации>
        
             
        
    

UncaughtExceptionHandler одинаково прост, по крайней мере, пока я не получу его работу:

private void setUncaughtExceptionHandler()
{
    final Handler handler = new Handler();
    Thread.setDefaultUncaughtExceptionHandler(handler);

}

class Handler implements Thread.UncaughtExceptionHandler
{

    @Override
    public void uncaughtException(Thread t, Throwable e)
    {
        System.out.println("Throwable: " + e.getMessage());
        System.out.println(t.toString());
    }
}

Я экспериментировал, ограничивая pointcut одним пакетом и выбрасывая исключение из этого пакета (а не из пакета, в котором ведется регистрация исключений), но он все равно регистрируется дважды. Есть ли что-то принципиально не так с этой идеей? Совет ценится.

1 ответ

Решение

Подумав об этом, решил, что Аспект не нужен, и только запутал эту проблему. Я добавил запись в UncaughtExceptionHandler, и теперь она регистрирует отдельные исключения. Я до сих пор не знаю, почему одно и то же исключение регистрировалось более одного раза.

Другие вопросы по тегам