如果在已知异常的情况下使用记录器,那么对于未知异常,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.errSystem.out时,您将失去这些功能,更糟糕的是,如果将loggerSystem.err.write混合使用,则可能最终会在不同的"file"中获得跟踪,这将使调试系统变得困难。

关于java - e.printStackTrace()有什么问题导致未知异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5855878/

10-10 07:30