首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java :在生产环境中使用printStackTrace

java :在生产环境中使用printStackTrace
EN

Stack Overflow用户
提问于 2012-01-06 11:19:29
回答 4查看 2.6K关注 0票数 5

我将在生产服务器下部署我们的Web应用程序。在生产环境中包含printStackTrace是否可以接受?(因为catch块下的日志无助于了解错误的确切原因)那么请告诉我,在catch块下是否可以使用printStackTrace?

例如,我故意放置一个无效的端口号,而printStackTrace()给出了这个信息。

printStackTrace() :

代码语言:javascript
复制
java.lang.IllegalArgumentException: port out of range:80800
        at java.net.InetSocketAddress.<init>(InetSocketAddress.java:118)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:234)
        at sun.net.www.http.HttpClient.New(HttpClient.java:307)
        at sun.net.www.http.HttpClient.New(HttpClient.java:324)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1014)
        at com.tata.util.XmlClient.execute(HttpXmlClient.java:83)

日志样式:

以及日志给出的位置(我正在使用机制进行日志记录)

代码语言:javascript
复制
 Log.write("**EXCEPTION INSIDE execute " + e, Log.INFO);

06/Jan/2012 16:25:55   - main:http-8080-2 <> <60990020>**EXCEPTION INSIDE execute  java.lang.IllegalArgumentException: port out of range:80800

那么,请告诉我,在catch块下是否可以接受printStackTrace?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-06 11:24:37

日志也会显示堆栈跟踪,但是您没有正确地使用它。尝试:

代码语言:javascript
复制
log.error(Object message, Throwable t);

当您执行Log.write("**EXCEPTION INSIDE execute " + e, Log.INFO);时,用作字符串连接符的加号实际上将调用e对象上的toString()方法,并将其附加到"**EXCEPTION INSIDE execute "字符串中,永远不会得到对异常对象或其堆栈跟踪的更改。

http://commons.apache.org/logging/guide.html#Logging消息

票数 5
EN

Stack Overflow用户

发布于 2012-01-06 11:25:59

在你的生活应用程序中有一个堆栈痕迹肯定是不好的。

为什么不为您的printStackTrace创建一个弹出窗口,并在某个调试标志处于活动状态时显示它(不确定这是如何在java中完成的)。

通常,你会让所有的异常泡到你需要处理的地方。连接错误可能是您希望在应用程序中显示的信息,因此您可以在前端处理它(例如,在弹出窗口中)。

Andrei Bodnarescu是对的,修理你的伐木机也能做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2012-01-06 11:26:39

那么,这样做是进行日志记录的第一种方法,当问题出现时,它肯定会对解决问题有所帮助。但是您可以改进使用日志库(如log4j或commons )、设置应用程序来使用它们并输出额外数据(DB查询、操作结果等),因此您将在堆栈跟踪旁边检索一些内容,可能使用更好的格式。

此外,拥有带有跟踪的容器/web服务器日志通常会引起客户端的怀疑,而具有结构化应用程序日志则会使他们更加平静。一个感知的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8757046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档