假设我想在日志中反映异常。
我应该将堆栈跟踪传递给log.error()
还是只是 Exception's toString()
?或者做一些更好的事情?
如何获取堆栈跟踪字符串以传递给记录器?
我当然会去记录整个堆栈跟踪。以这种方式找到它的来源要容易得多。
我不知道您使用什么库进行日志记录,但如果它不支持记录异常,您可以通过以下方式将堆栈跟踪作为字符串获取:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
exception.printStackTrace(ps);
ps.close();
String stacktrace = baos.toString();
当使用类似log4j的东西时,异常有一个额外的参数,所以你通常会这样写:
catch(Exception e){
logger.error("some message", e);
}
Log4j 将负责打印堆栈跟踪。
要记住的一件事(至少对于 log4j)是:当您不想记录消息而只想记录异常时,您必须使用:
logger.error("", e);
不是
logger.error(e); // bad usage! This uses e.toString()!!