java:在生产环境中使用printStackTrace

4 java logging production-environment

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

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

printStackTrace():

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)
Run Code Online (Sandbox Code Playgroud)

日志样式:

日志给出了这个(我使用Apache commons日志记录机制进行日志记录)

 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
Run Code Online (Sandbox Code Playgroud)

那么请告诉我在catch块下是否可以使用printStackTrace?

Shi*_*gon 5

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

log.error(Object message, Throwable t);
Run Code Online (Sandbox Code Playgroud)

当您执行Log.write("**EXCEPTION INSIDE execute " + e, Log.INFO);用作String的加号时,concatenator实际上将调用toString()e对象上的方法,并将其附加到"**EXCEPTION INSIDE execute "String,永远​​不会得到更改以获取异常对象或它的堆栈跟踪.

http://commons.apache.org/logging/guide.html#Logging a Message