是否有可能让我的所有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);
}
}
或者对于我的目标是什么有更好的想法(在代码中只有通用的例外)?
答案 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
}
}