【发布时间】:2011-11-20 02:58:39
【问题描述】:
there 中有很多 material 表明打印异常的堆栈跟踪是不好的做法。
例如从 Checkstyle 中的 RegexpSingleline 检查:
此检查可用于 [...] 查找常见的不良做法,例如调用 ex.printStacktrace()
但是,我正在努力寻找任何可以给出合理理由的地方,因为堆栈跟踪对于追踪导致异常的原因肯定非常有用。我知道的事情:
-
最终用户不应看到堆栈跟踪(出于用户体验和安全目的)
-
生成堆栈跟踪是一个相对昂贵的过程(尽管在大多数“异常”情况下不太可能成为问题)
-
许多日志框架会为您打印堆栈跟踪(我们的不会,也不会,我们无法轻易更改)
-
打印堆栈跟踪不构成错误处理。它应该与其他信息记录和异常处理相结合。
还有哪些其他原因可以避免在代码中打印堆栈跟踪?
【问题讨论】:
-
作为一个必须定期排除故障的人,我从不会在出现问题时省略打印堆栈跟踪。是的,不要向用户显示它,但是是的,将其转储到错误日志中。
-
你真的需要其他理由吗?我认为你已经很好地回答了你自己的问题。但是,堆栈跟踪应该在异常异常中打印。 :)
-
Error Prone 现在将在您的代码中 warn you about using
.printStackTrace():) -
为了避免@Vineet Reynolds 提到的输出流问题,您可以将其打印到标准输出:
e.printStackTrace(System.out);
标签: java exception stack-trace printstacktrace