我需要将从接受中获取的堆栈跟踪记录在日志中,所以我这样做:
final static Logger logger = LoggerFactory.getLogger(MyClass.class);
try{
..
}catch(NumberFormatException number_format){
logger.error(number_format.exception.getStackTrace().toString());
}
但是它不起作用,因为它会打印我Ljava.lang.StackTraceElement;@775a19fe
。有人可以帮助我吗?
答案 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));
}