e.printStackTrace()对于未知异常有什么问题

shi*_*ike 9 java logging exception-handling

如果我在已知异常的情况下使用记录器,那么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();
        }
Run Code Online (Sandbox Code Playgroud)

Man*_*res 14

因为它不使用记录仪系统,它会直接stderr具有被避免.

编辑:为什么必须避免直接写入stderr?

在回答你的问题时,@ shinynewbike,我略微修改了我的答案.它有什么要避免的编写直接stderr不使用logger能力.

loggers 提供有用的功能来按优先级和包更改日志记录跟踪,除此之外,它们还允许将跟踪重定向到不同的输出机制...队列,文件,数据库,流......

直接写入System.errSystem.out丢失这些功能时,如果混合使用会更糟糕logger,System.err.write最终可能会在不同的"文件"中获得跟踪,这将使调试系统变得困难.


Pet*_*rey 5

恕我直言,你应该

  • 始终记录到记录器或标准错误,但不是混合(也许这是投诉的原因)
  • 除非您确定永远不需要它,否则始终使用堆栈跟踪记录异常.