Мой аспект регистрации исключений - это регистрация одного и того же исключения дважды - PullRequest
0 голосов
/ 17 ноября 2011

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

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

Мой applicationContext является базовым для этого:

    &ltaop:config&gt
        &ltaop:aspect ref="exceptionLoggingAspect"&gt
             &ltaop:after-throwing method="logException"
              pointcut="execution(* *.*(..))" throwing="exception" /&gt
        &lt/aop:aspect&gt
    &lt/aop:config&gt

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 Ответ

0 голосов
/ 25 ноября 2011

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

...