如果我在已知异常的情况下使用记录器,那么对于未知异常,e.printStackTrace()
有什么问题?
我总是被告知不要这样做 - 但没有给出理由
下面的例子
try {
dostuff();
} catch (AException ae) {
logger.error("ae happened");
} catch (BException be) {
logger.error("be happened");
} catch (CException ce) {
logger.error("ce happened");
} catch (Exception e) {
e.printStackTrace();
}
最佳答案
因为它不使用记录器系统,所以它直接到必须避免的stderr
。
编辑:为什么必须避免直接写入 stderr?
在回答你的问题时,@shinynewbike,我稍微修改了我的答案。必须避免的是在不使用logger
功能的情况下直接 写入stderr
。
loggers
提供有用的功能来按优先级和包更改日志记录跟踪,除其他外,它们还允许将跟踪重定向到不同的输出机制......队列、文件、数据库、流......
当您直接写入 System.err
或 System.out
时,您将失去这些功能,如果您混合使用 logger
则更糟和 System.err.write
您可能最终会在不同的"file"中获取跟踪信息,这将使调试系统变得困难。
关于java - 未知异常的 e.printStackTrace() 出了什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5855878/