Java 在由web应用程序中的第三方代码创建的线程中记录未捕获的异常

Java 在由web应用程序中的第三方代码创建的线程中记录未捕获的异常,java,multithreading,glassfish,uncaught-exception,Java,Multithreading,Glassfish,Uncaught Exception,我怀疑由我的web应用程序使用的第三方jar创建的线程可能会抛出异常,而没有捕获它。但是,我在日志文件中没有看到任何这方面的证据。如何强制将所有未捕获的异常转储到日志文件?这适用于运行在Glassfish内部的web应用程序。您可以更改未捕获异常处理程序 您可以更改未捕获异常处理程序 您可以使用线程的setDefaultUncaughtExceptionHandler静态方法设置默认未捕获异常处理程序: Thread.setDefaultUncaughtExceptionHandler( n

我怀疑由我的web应用程序使用的第三方jar创建的线程可能会抛出异常,而没有捕获它。但是,我在日志文件中没有看到任何这方面的证据。如何强制将所有未捕获的异常转储到日志文件?这适用于运行在Glassfish内部的web应用程序。

您可以更改未捕获异常处理程序


您可以更改未捕获异常处理程序


您可以使用
线程的
setDefaultUncaughtExceptionHandler
静态方法设置默认未捕获异常处理程序:

Thread.setDefaultUncaughtExceptionHandler( new Thread.UncaughtExceptionHandler() {
            public void uncaughtException( final Thread t, final Throwable e ) {
                ...

您可以使用
线程的
setDefaultUncaughtExceptionHandler
静态方法设置默认未捕获异常处理程序:

Thread.setDefaultUncaughtExceptionHandler( new Thread.UncaughtExceptionHandler() {
            public void uncaughtException( final Thread t, final Throwable e ) {
                ...

事实证明,这对于Glassfish是不必要的,因为Glassfish已经做到了——但我在日志中看错了位置


异常被打印到主
server.log
文件中,而不是打印到我的应用程序自己的log4j日志文件中。

事实证明,这对于Glassfish是不必要的,因为Glassfish已经这样做了,但我在日志中查看了错误的位置


异常被打印到主
server.log
文件中,而不是打印到我的应用程序自己的log4j日志文件中。

事实上,我知道的任何容器都会捕获异常(或可丢弃),因此Thread.setUncaughtExceptionHandler不会有帮助。解决方案是将调用包装在try/catch中,实际上我知道的任何容器都会捕获异常(或Throwable),因此Thread.setUncaughtExceptionHandler不会有帮助。解决方案将调用包装在try/catch中