Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对caugt异常使用printStackTrace()是个坏主意吗?_Java_Exception_Printstacktrace - Fatal编程技术网

Java 对caugt异常使用printStackTrace()是个坏主意吗?

Java 对caugt异常使用printStackTrace()是个坏主意吗?,java,exception,printstacktrace,Java,Exception,Printstacktrace,在Android异常中使用printStackTrace()是个坏主意吗 } catch (Exception e) { e.printStackTrace(); } 问题是:在Andriod应用程序上下文中,打印到堆栈跟踪是否有用? 标准输出在运行时是否可见?有人会在意吗 我的观点是,如果没有人检查标准输出并调试错误,那么对该方法的调用就是死代码,编写stacktrace消息是毫无价值的开销。如果只在开发时调试时需要它,可以设置一个可访问的全局常量,并在运行时检查它: } catch

在Android异常中使用printStackTrace()是个坏主意吗

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

问题是:在Andriod应用程序上下文中,打印到堆栈跟踪是否有用? 标准输出在运行时是否可见?有人会在意吗

我的观点是,如果没有人检查标准输出并调试错误,那么对该方法的调用就是死代码,编写stacktrace消息是毫无价值的开销。如果只在开发时调试时需要它,可以设置一个可访问的全局常量,并在运行时检查它:

} catch (Exception e) {
   if(com.foo.MyEnvironmentConstants.isDebugging()) {
      e.printStackTrace();
   } //else do noting
}

我将避免使用
printStackTrace()
,使用日志系统及其对异常的支持

log.log(Level.SEVERE, "Uncaught exception", e);

因此,如果您想更改日志记录的处理方式,这会容易得多。

是的,这不是一个好主意。您应该改为使用Android的内置日志类,该类专门为以下目的而设计:

它为您提供了记录调试消息、警告、错误等的选项

使用以下命令记录错误:

Log.e(标记“message”,e)
其中消息可以解释引发异常时尝试的操作

或者如果您不希望为上下文提供任何消息,只需
Log.e(TAG,e)


然后,您可以在运行代码时单击底部的日志控制台,并使用标记或日志消息类型作为过滤器轻松搜索它

我相信这就是您需要的:

catch (Exception e) {
     Log.e(TAG,Log.getStackTraceString(e)); 
}
printStackTrace()
很方便,但不鼓励使用,尤其是在Android上,它可以通过
logcat
看到,但会以未指定的级别记录,并且没有正确的消息。相反,记录异常的正确方法是

Log.e(TAG, "Explanation of what was being attempted", e);

请注意,异常用作第三个参数,而不是附加到消息参数<代码>日志为您处理详细信息–打印您的消息(其中给出了您试图在代码中执行的操作的上下文)和
异常
的消息及其堆栈跟踪。

否。OP需要的是
Log.e(标记,“抛出异常时尝试的内容的解释”,e)
。注意第三个参数。Log.e(String,String,Throwable)为您从Throwable中获取stacktrace字符串。使用
message
参数进行有意义的操作。@spaaarky21您应该回答这个问题。@AndreKR有人已经回答了。:)我投了更高的票。我只是想指出,这个答案是在推广一种不好的做法,因为与正确答案相比,它的评分太高了。@spaaarky21我从你的答案中了解到,我可以将异常传递给
android.util.Log.e()
。我没有从其他答案中学到这一点。(我没有点击Nailuj回答中的链接。)@AndreKR谢谢。这很有道理。我指的是Ryan的答案,但现在我再看一遍,我发现它以一种不同寻常的方式使用了
Log
——使用
Log
实例(我假设?),并将级别作为参数传入。我补充了一个答案。