如何获得Elasticsearch.NET/NEST中错误的“真实”根本原因?

时间:2019-03-05 17:50:46

标签: elasticsearch nest elasticsearch.net

我正在使用Elasticsearch.NET在.NET环境中使用Elasticsearch进行一些自定义错误处理/记录。给定一个IResponse对象,我试图找到一种最佳策略,以摘出简短,简洁且有用的“根本原因”消息。我最初是到达此位置的,当我们特别遇到索引错误时,该功能非常有用:

shortMsg = response.ServerError?.Error?.RootCause?.FirstOrDefault()?.Reason;

但是我最近遇到了一个查询时错误,上面的内容给了我:

"failed to create query: { ... }"

(省略了详细信息,但有效地转储了整个查询。)

由于这不是特别有用,因此我花了一些时间遍历response来看看还有什么可用的。例如,response.ServerError.Error.Reason返回"all shards failed"-也不是特别有用。 response.DebugInformation比我为此目的想要的要大得多,但我确实在大海捞针中找到了我要寻找的针头:

"Can't parse boolean value [True], expected [true] or [false]"

那是完美的,为了避免将其从DebugInfomation中解析出来,我还设法在这里找到它:

response.ServerError.Error.Metadata.FailedShards.First().Reason.CausedBy.Reason

因此,在这一点上,我已经制定了获取我的shortMsg的策略:

shortMsg =
    response.ServerError?.Error?.Metadata?.FailedShards?.FirstOrDefault()?.Reason?.CausedBy?.Reason ??
    response.ServerError?.Error?.RootCause?.FirstOrDefault()?.Reason;

我对此的担心是,如果假设第一个路径上存在某些东西,那么它会总是比第二个“更好”,这可能是天真的想法。更好地了解响应结构本身可能是在此处获得最佳策略的关键。

有什么改善建议吗?

0 个答案:

没有答案