在idea中提示Call to ‘printStackTrace()’ should probably be replaced with more robust logging,意为避免printStackTrace(); 改用logging器调用。

1、e.printStackTrace()

try {
	...
} catch(Exception e) {
      e.printStackTrace();
}

当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象引用名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace() ;
printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。

e.printStackTrace() 会导致锁死,建议使用logback或log4j等日志框架,而不是直接打印exception。

e.printStackTrace(); 
log.error("exception message", e); 

日志框架为您提供了很大的灵活性,例如,您可以select是否要login到控制台或文件 – 或者如果在某些环境中发现它们不再相关,则可能会跳过一些消息。
如果对exception调用printStackTrace() ,则跟踪将写入System.err ,并且很难将其路由到其他位置(或者对其进行过滤)。 不要这样做,建议使用日志框架(或多个日志框架的包装,如Apache Commons Logging),并使用该框架loggingexception(例如logger.error(“exception message”, e) )。

2、日志框架

使用日志有如下优点:

  • 日志消息可转到configuration的位置。
  • 除非您configuration日志logging,否则最终用户不会看到这些消息。
  • 可以使用不同的logging器和logging级别等来控制logging多less或多lesslogging。
  • 可以使用不同的appender格式来控制日志的外观。
  • 可以轻松地将日志logging输出插入到更大的监视/日志logging框架中。
  • 以上所有都可以在不改变你的代码的情况下完成; 即通过编辑已部署的应用程序的日志configuration文件。

相比之下,如果您只是使用printStackTrace,则部署者/最终用户几乎没有任何控制权,并且日志消息可能会在不适当的情况下丢失或显示给最终用户。

3、小结

简单地说,e.printStackTrace()不是好的做法,因为它只是将堆栈跟踪打印到标准错误。 正因为如此,你不能真正控制这个输出的位置。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐