如何将堆栈跟踪错误放入记录器

时间:2018-07-31 15:18:01

标签: java exception logging

我需要将从接受中获取的堆栈跟踪记录在日志中,所以我这样做:

final static Logger logger = LoggerFactory.getLogger(MyClass.class);

try{
    ..
}catch(NumberFormatException number_format){
    logger.error(number_format.exception.getStackTrace().toString());
}

但是它不起作用,因为它会打印我Ljava.lang.StackTraceElement;@775a19fe。有人可以帮助我吗?

4 个答案:

答案 0 :(得分:2)

要使用记录器记录stracktrace,请使用适合以下记录器的重载方法:

Logger.error(String msg, Throwable t);

Slf4j,Log4j,LogBack,common-logging ...所有这些都区分Logger.error(String msg)记录错误消息和Logger.error(String msg, Throwable t)记录错误消息和{{1}的stracktrace }。

所以写类似:

Throwable

答案 1 :(得分:1)

getStackTrace()返回StackTraceElement[],其toString()函数没有被覆盖,因此您可以在java.lang.Object类中获得所需的内容:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这就是为什么您收到此消息的原因。您应该改用getMessage()类的Exception函数。

如果您想要stacktrace消息,则可以这样获得它:

Arrays.stream(e.getStackTrace()).map(String::valueOf).collect(Collectors.joining("\n")),然后将其输出。

答案 2 :(得分:0)

这取决于您的日志记录库,但是通常您需要执行以下操作:

std::tuple<int, int>

答案 3 :(得分:0)

Apache Commons Lang库可以根据给定的异常(特别是ExceptionUtils)提供可读的堆栈跟踪。

try {
    ..
}
catch(NumberFormatException e) {
    logger.error(ExceptionUtils.getStackTrace(e));
}