全球日志捕获例外e

时间:2010-05-12 15:25:48

标签: java exception exception-handling

假设我有一个包含数千行代码的遗留Java应用程序:

try {
   // stuff 
} catch (Exception e) {
   // eat the exception
}

是否有任何全局选项可以翻转或第三方JAR会记录所有“吃掉”的异常?我知道我可以做一个大规模的查找替换(搜索catch(异常e){并将其替换为catch(异常e){logException(e);)但我想知道是否有更好的解决方案。谢谢!

4 个答案:

答案 0 :(得分:7)

您可以提供自己的Exception实现,它在构造函数中记录堆栈跟踪。从java的手册页:

  

<强> -Xbootclasspath:启动类路径
  指定以冒号分隔的目录列表,JAR存档,   和ZIP存档以搜索引导类文件。这些是   用于代替Java 2中包含的引导类文件   SDK。

答案 1 :(得分:5)

似乎是面向方面编程可以派上用场的地方。您可以设置异常处理程序切入点。查看AspectJ以获得更好的AOP实现。

答案 2 :(得分:0)

没有。如果代码捕获异常并且对它没有任何作用,那么在不更改代码的情况下,您无法做任何改变。

find-replace应该有效。但是,我强烈建议您稍后使用FindBugs进行检查,以确保找到了此问题的所有实例。 (无论如何,FindBugs应该是你的过程的一部分,但我只是指出它,以防任何阅读此内容的人都没有使用它。)

答案 3 :(得分:0)

这将允许您处理任何未捕获的异常:

Thread.setDefaultUncaughtExceptionHandler(
  new Thread.UncaughtExceptionHandler(){
    public void uncaughtException(Thread t, Throwable e) {
      //handle the exception
    }
});