3

我正在使用 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;

我对此的担忧是,假设如果第一条路径上存在某些东西,它总是比第二条“更好”,这可能是天真的。更好地理解响应结构本身可能是在这里找到最佳策略的关键。

有什么改进的建议吗?

4

0 回答 0