I am going to deploy our Web Application under Production server. Is including printStackTrace under catch block in production environment acceptable? (becuase the logs under catch block doesn't help to know the exact cause for the error) So please tell me if is it aceptable to have printStackTrace under catch block?
For instance, I purposefully put an invalid port number and printStackTrace() gives me this information.
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)
Log style :
And where as the log gives this (I am using Apache commons logging mechanism for logging)
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
So please tell me if is it acceptable to have printStackTrace under catch block?
The log will show the stacktrace as well, but you're not using it correctlly. Try:
log.error(Object message, Throwable t);
When you do Log.write("**EXCEPTION INSIDE execute " + e, Log.INFO);
the plus sign used as String concatenator will in fact call the toString()
method on the e object, and append that to the "**EXCEPTION INSIDE execute "
String, never getting a change to get to the exception object or it's stack trace.
http://commons.apache.org/logging/guide.html#Logging a Message