在java中将字符串转换为堆栈跟踪

问题描述 投票:0回答:2

我有多个堆栈跟踪,我想使用 getStackTrace、getCause 等 Throwable 方法为每个堆栈生成唯一的 id。我面临的问题是这些堆栈跟踪已经生成,我正在从它们所在的数据库中获取它们已存储为字符串。有什么办法可以将它们转换回 Throwable 吗?

java stack-trace throwable
2个回答
1
投票

Exception
实现
Serializable
。如果您使用 Java 的序列化 API 将异常存储到数据库中,您应该能够使用相同的 API 将它们反序列化回
Exception
对象。

请参阅 https://docs.oracle.com/javase/7/docs/api/java/io/Serialized.html 了解有关此内容的官方文档。

如果您当前不通过该机制存储它们,那么您就不走运,需要更改它。


0
投票

如果您有一点创意,您可以从纯文本堆栈跟踪手动创建带有堆栈跟踪的异常,但它显然不会与原始异常相同。

这是日志中的堆栈跟踪示例:

org.apache.solr.common.SolrException: org.apache.solr.client.solrj.SolrServerException: cancel_stream_error/closing
    at org.apache.solr.handler.component.SearchHandler.throwSolrException(SearchHandler.java:665)
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:583)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:226)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:2884)

运行

ex.printStackTrace()
将打印与此手工制作的异常完全相同的内容:

SolrException ex = new SolrException(
    SolrException.ErrorCode.SERVER_ERROR, 
    "org.apache.solr.client.solrj.SolrServerException: cancel_stream_error/closing"
);
ex.setStackTrace(new StackTraceElement[]{
    new StackTraceElement("org.apache.solr.handler.component.SearchHandler", "throwSolrException", "SearchHandler.java", 665),
    new StackTraceElement("org.apache.solr.handler.component.SearchHandler", "handleRequestBody", "SearchHandler.java", 583),
    new StackTraceElement("org.apache.solr.handler.RequestHandlerBase", "handleRequest", "RequestHandlerBase.java", 226),
    new StackTraceElement("org.apache.solr.core.SolrCore", "execute", "SolrCore.java", 2884),
});
© www.soinside.com 2019 - 2024. All rights reserved.