我的应用程序中,我正在通过PMD运行我的代码。它显示了以下消息:
- 避免使用printStackTrace(); 使用日志记录调用替代。
这是什么意思?
我的应用程序中,我正在通过PMD运行我的代码。它显示了以下消息:
- 避免使用printStackTrace(); 使用日志记录调用替代。
这是什么意思?
printStackTrace()
,则堆栈跟踪将被写入System.err
,很难将其路由到其他位置(或过滤它)。建议使用日志框架(或多个日志框架的包装器,如Apache Commons Logging),并使用该框架记录异常(例如,logger.error("一些异常消息",e)
)。
这样做可以让你:
一个生产质量的程序应该使用其中一种日志记录工具(例如log4j、logback、java.util.logging)来报告错误和其他诊断信息。这有许多优点:
相比之下,如果仅使用printStackTrace,则部署者/最终用户几乎没有任何控制权,而日志消息很可能会在不适当的情况下丢失或显示给最终用户。(对于一条随机的堆栈跟踪,没有什么比这更恐怖的了。)
简单来说,e.printStackTrace() 不是一个好的做法,因为它只是将堆栈跟踪输出到标准错误流。由于这个原因,你不能真正控制这个输出去向。
public trace(Marker marker, String msg, Throwable t);
让我们从公司的概念来谈论。日志记录器提供了灵活的级别(参见logger.info和logger.debug之间的区别)。不同的人想要看到不同的级别,比如QA、开发人员、业务人员。但是e.printStackTrace()会打印出所有内容。此外,如果这个方法将被restful调用,同样的错误可能会打印多次。那么你公司的Devops或Tech-Ops人员可能会疯掉,因为他们会收到相同的错误提醒。
我认为更好的替代方案可能是log.error("XXX中发生了错误", e)
这也将打印出整个信息,比e.printStackTrace()更容易阅读。