在记录器中获取堆栈跟踪

时间:2012-02-02 17:57:10

标签: java log4j stack-trace

我正在使用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();但是我没有得到完整的堆栈跟踪。有什么建议吗?

5 个答案:

答案 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);