由于代码块可能抛出的异常数量,我必须按如下方式捕获泛型异常:
...
try {
//some scandalous code
scandalousMethod();
} catch (Exception e) {
log.error(String.format("'%s'", e.class.getName())); //Need suggestions here
}
...
我需要记录catch块中捕获的异常类型。我不认为e.class.getName()会起作用。有什么建议吗?
答案 0 :(得分:1)
你只需要这样做:
e.getClass()
而不只是e.class
。 getClass
方法在Object
上定义(因此它可用于所有引用类型)并在运行时查找对象的类型。
顺便说一下,我不知道你使用哪个日志框架,但是大多数日志框架都有重载,将异常作为参数。这很有用,因为记录器可以设置为打印完整的堆栈跟踪,而不仅仅是其方法。这有点像:
log.error("my specific message", e);
答案 1 :(得分:0)
记录异常的正确方法(在今天的大多数日志框架中 - JCL,log4j,Slf4j,logback)应该执行以下操作:
log.error(“处理scandalousMethod时出错:这里可能有些输入”,e);
注意最后的“,e”。这通常不仅打印出异常的完整类名,还打印出消息和堆栈跟踪。