54

I am using log4j to log my exceptions. I want to log whatever I get in e.printStackTrace();
My code looks like this:

try {

} catch(Exception e) {
    log.error("Exception is:::" + e);
}

But the content I get logged looks like this:

2012-02-02 12:47:03,227 ERROR [com.api.bg.sample] - Exception in unTech:::[Ljava.lang.StackTraceElement;@6ed322
2012-02-02 12:47:03,309 ERROR [com.api.bg.sample] - Exception is :::java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

But the content I expect is:

java.io.IOException: Not in GZIP format
at java.util.zip.GZIPInputStream.readHeader(Unknown Source)
at java.util.zip.GZIPInputStream.<init>(Unknown Source)
at java.util.zip.GZIPInputStream.<init>(Unknown Source)
at com.api.bg.sample.unGZIP(sample.java:191)
at com.api.bg.sample.main(sample.java:69)

I tried e.getMessage(), e.getStackTrace(); however I don't get the full stacktrace. Any suggestions?

Allan Pereira
  • 2,572
  • 4
  • 21
  • 28
Geek
  • 3,187
  • 15
  • 70
  • 115

5 Answers5

89

You have to use the two argument form

log.error("my logging message", exception)

See http://www.devdaily.com/blog/post/java/how-print-exception-stack-trace-using-log4j-commons for more details.

David
  • 177
  • 2
  • 11
Brian Tarbox
  • 2,335
  • 1
  • 20
  • 30
8

Change your logging statement to:

log.error("Exception is: ", e);
Jonathan
  • 7,536
  • 4
  • 30
  • 44
4

It is actualy log4j that prevents the printing of the fulltime stacktrace. You should however set the exception as a second parameter for the error method.

Kurt Du Bois
  • 7,550
  • 4
  • 25
  • 33
3

If you use the below than e.toString() will be called which calls e.getMessage()

log.error("Exception is:::" + e);

However, to print full stack trace you can use the below:

log.error("Exception is:::" + ExceptionUtils.getStackTrace(e));

where ExceptionUtils is imported as org.apache.commons.lang3.exception.ExceptionUtils

Arun
  • 785
  • 8
  • 13
0
log.log(LEVEL.ERROR,e.getMessage(),e);
Paul Roub
  • 36,322
  • 27
  • 84
  • 93
Mansa
  • 11