简短版本: 我如何捕获java.lang.Error
特定代码部分中的所有抛出以记录它们,并允许它们传播调用堆栈,就好像我根本没有捕获它们一样?
长版...
在一段代码中,我想捕获所有内容java.lang.Error
以便记录它们。但我也想让Error
继续在调用堆栈中向上工作,这样行为就好像我根本没有抓住它一样。
此外,我想捕获并记录所有java.lang.Exception
s,然后让它们也传播调用堆栈。
我试过这个...
} catch (Throwable e) {
e.printStackTrace();
throw e;
}
...但问题是我必须修改调用堆栈中更高的每个方法才能 throw Throwable
,其中一些方法不是我要修改的(我的方法被第三方框架中的方法调用)。
我会对某种包裹技术感到满意,我会把它放在Throwable
别的东西里然后扔掉,但我更愿意让任何java.lang.Error
s 以它们自然的方式向上传播,就好像我根本没有抓住它们一样。
建议?
编辑: 有人问“我为什么要这样做?”。我认为这是一个很好的问题,我将澄清:这是我公司使用的框架。它取决于 jar 中包含的其他框架,系统管理员可能忘记包含这些框架。在这种情况下,代码中的某些位置会出现 NoClassDefFoundError。但只有用户在浏览器中看到此错误,在服务器日志中找不到。我想记录它,以便系统管理员可以知道发生了此错误,因为他将有处理它的说明。