如果在已知异常的情况下使用记录器,那么对于未知异常,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时,我对我的回答做了一些修改。必须避免的是,不使用stderr
功能将直接写入logger
。loggers
提供有用的功能来按优先级和程序包更改日志记录跟踪,此外,它们还允许将跟踪重定向到不同的输出机制...队列,文件,数据库,流...
当您直接写入System.err
或System.out
时,您将失去这些功能,更糟糕的是,如果将logger
和System.err.write
混合使用,则可能最终会在不同的"file"中获得跟踪,这将使调试系统变得困难。
关于java - e.printStackTrace()有什么问题导致未知异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5855878/