Java中的异常处理

时间:2011-03-21 21:14:08

标签: java exception logging

是否有可能让我的所有try / catch代码捕获超类Exception,然后让一些util类找出异常的类型,以便我可以记录特定的类型? 例如:

CustomLog{
  Logger log= ....

  public static logTrace(Exception e){
    log.debug("name of exception: " + e.????);
  }

}

SomeOtherClass{

  try{

  }catch(Exception e){
    CustomLog.logTrace(e);
  }

}

或者对于我的目标是什么有更好的想法(在代码中只有通用的例外)?

4 个答案:

答案 0 :(得分:2)

如果您的目的只是记录有关异常的信息,那么只需将Exception传递给相应的日志记录方法,让记录器为您完成工作:

log.error("Exception caught", e)

Most logging APIs support Throwable作为debug()error()等方法的参数。除非你有真正的理由,否则无需重新发明轮子。

关于你关于架构的问题(“有一个更好的想法”部分),你可以遵循一个基本规则:如果你可以对异常做一些事情(例如回滚一个事务),那么抓住它并做适当的事情。如果你无法从中恢复,那么从你的方法中抛出它并让调用者处理它。

最终,不可恢复的异常将向上传播到容器(无论是主方法,servlet容器还是其他东西)。然后,容器可以以其他方式写入日志,发送警报或处理异常。

不要使用普通Exception(与您的建议一样)。 不要抓住某些东西,记录它,然后继续处理,就好像没有发生一样(除非真的对你的具体情况有意义)。如果您无法处理异常,请从您所使用的方法中抛出异常,并让更高级别的方法处理它。

答案 1 :(得分:0)

尝试:

e.getClass().getName()

但是,如果它是包装异常,您可能需要考虑记录它的原因。

答案 2 :(得分:0)

我认为

Exception.toString()会给你你想要的东西。

答案 3 :(得分:0)

只要CustomLog可以访问Exception的专用类,那么是。

您甚至可以在CustomLog代码中执行以下操作:

logTrace(Exception ex) {
   try {
       throw ex;
   } catch(CustomException ex) {
       // specialized handling of CustomException
   } catch(Exception ex) {
       // unknown exception
   }
}