我正在使用log4j来记录我的异常。我想记录e.printStackTrace();
中的任何内容
我的代码如下所示:
try {
} catch(Exception e) {
log.error("Exception is:::" + e);
}
但我记录的内容如下:
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
但我期望的内容是:
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)
我尝试e.getMessage()
,e.getStackTrace();
但是我没有得到完整的堆栈跟踪。有什么建议吗?
答案 0 :(得分:64)
您必须使用两个参数形式
log.error("my logging message", exception)
有关详细信息,请参阅http://www.devdaily.com/blog/post/java/how-print-exception-stack-trace-using-log4j-commons。
答案 1 :(得分:7)
将您的日志记录语句更改为:
log.error("Exception is: ", e);
答案 2 :(得分:1)
实际上是log4j阻止了全时栈跟踪的打印。但是,您应该将异常设置为错误方法的第二个参数。
答案 3 :(得分:1)
如果你使用下面的 e.toString() 将被调用它调用 e.getMessage()
log.error("Exception is:::" + e);
但是,要打印完整的堆栈跟踪,您可以使用以下内容:
log.error("Exception is:::" + ExceptionUtils.getStackTrace(e));
其中 ExceptionUtils 被导入为 org.apache.commons.lang3.exception.ExceptionUtils
答案 4 :(得分:0)
log.log(LEVEL.ERROR,e.getMessage(),e);