避免使用printStackTrace(); 请使用记录器调用

use*_*398 67 java logging pmd printstacktrace

在我的应用程序中,我通过PMD运行我的代码.它向我显示了这条消息:

  • 避免使用printStackTrace(); 请使用记录器调用.

那是什么意思?

Tom*_*icz 114

这意味着您应该使用等日志框架,而不是直接打印异常:

e.printStackTrace();
Run Code Online (Sandbox Code Playgroud)

你应该使用这个框架的API来记录它们:

log.error("Ops!", e);
Run Code Online (Sandbox Code Playgroud)

日志框架为您提供了很大的灵活性,例如,您可以选择是否要登录到控制台或文件 - 或者如果您发现它们在某些环境中不再相关,可能会跳过某些消息.


Tho*_*mas 36

如果您调用printStackTrace()异常,则会写入跟踪,System.err并且很难将其路由到其他位置(或过滤它).而不是这样做,建议您使用日志框架(或围绕多个日志框架的包装器,如Apache Commons Logging)并使用该框架记录异常(例如logger.error("some exception message", e)).

这样做可以让你:

  • 将日志语句一次写入不同的位置,例如控制台和文件
  • 按严重性(错误,警告,信息,调试等)和来源(通常是包或类)过滤日志语句
  • 对日志格式有一些影响而不必更改代码
  • 等等


Ste*_*n C 16

生产质量计划应使用众多日志备选方案之一(例如log4j,logback,java.util.logging)来报告错误和其他诊断.这有许多优点:

  • 日志消息转到可配置的位置.
  • 除非您配置日志记录以便他/她执行,否则最终用户不会看到消息.
  • 您可以使用不同的记录器和日志记录级别等来控制记录少量或多少日志记录.
  • 您可以使用不同的appender格式来控制日志记录的内容.
  • 您可以轻松地将日志记录输出插入更大的监视/日志记录框架.
  • 以上所有操作都可以在不更改代码的情况下完成; 即通过编辑已部署的应用程序的日志配置文件.

相比之下,如果您只使用printStackTrace,则部署者/最终用户几乎没有控制权,并且在不适当的情况下,日志消息可能会丢失或显示给最终用户.(并且没有什么比一个随机堆栈跟踪更害怕胆小的用户.)


小智 5

在Simple中,e.printStackTrace()不是一个好习惯,因为它只是将堆栈跟踪信息打印到标准错误。因此,您无法真正控制此输出的位置。