2012-05-14 2 views
3

Можно ли обрабатывать (простую запись в журнале) все не обрабатываемые исключения?Обработка всех исключений, не связанных с обработкой

Более подробно, мне нужно регистрировать любое исключение, которое происходит в любом месте кода, регистрировать исключение, а затем продолжить (что может привести к более очевидным исключениям!).

+0

Что именно вы имеете в виду под «продолжить»? AFAIK, как только исключение распространяется на вызывающий стек, нет никакого способа «продолжить» с тем, что делал ваш код. –

ответ

5

Вы можете использовать Default Uncaught Exception Handler, чтобы поймать любые неиспользуемые исключения.

Возможно также установить определенный обработчик для каждой нити или группы потоков.

1

Для этого можно использовать AOP (Aspect Oriented Programming). В частности, вы можете создать аспект, который регистрирует все исключения.

Если вы используете пружину, вы можете использовать AfterThrowing Advice Annotation для этого.

0

вот кусок кода, который может помочь вам:

public class MyDefaultExceptionHandler extends DefaultExceptionHandler 
    { 

    private UncaughtExceptionHandler defaultUEH; 

    public MyDefaultExceptionHandler() 
    { 
    this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); 
    } 

    @Override 
    public void uncaughtException(Thread t, Throwable e) 
    { 
    //print anything you wish about the Throwable e :getStackTrace(), getCause(), getClass()... 
    defaultUEH.uncaughtException(t, e); //this will call the default handling of the exception (crash...) 
    } 
    } 
… 
//in the main app: 
Thread.setDefaultUncaughtExceptionHandler(new MyDefaultExceptionHandler());