java - 未知异常的 e.printStackTrace() 出了什么问题

标签 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();
        }

最佳答案

因为它不使用记录器系统,所以它直接到必须避免的stderr

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

在回答你的问题时,@shinynewbike,我稍微修改了我的答案。必须避免的是在不使用logger 功能的情况下直接 写入stderr

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

当您直接写入 System.errSystem.out 时,您将失去这些功能,如果您混合使用 logger 则更糟和 System.err.write 您可能最终会在不同的"file"中获取跟踪信息,这将使调试系统变得困难。

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

相关文章:

java - 如何按值存储间隔和查找间隔?

java - 替换字符串末尾的感叹号

java - 我的 GridLayout 中的元素是否可以只占用所需的空间,而不是等宽?

winforms - 无法捕获 FormClosing 中抛出的异常

java - 为什么 Gradle 'build' 任务不是最新的,即使源代码没有变化?

ios - 如何在 SwiftUI 预览中打印?

logging - stackdriver 日志记录如何断言条目的严重性?

logging - 记录经典 ASP 表单帖子

C : How do you simulate an 'exception' ?

c++ - 发出信号或捕获 'nan',因为它们出现在 C++ 数字代码库的计算中