From 00f9946dc5efe5138d2076fc77a22dbbd4b849f2 Mon Sep 17 00:00:00 2001 From: cvictory <shenglicao2@gmail.com> Date: Mon, 13 Jul 2020 14:33:08 +0800 Subject: [PATCH] modify return error and log --- .../cluster_impl/failover_cluster_invoker.go | 7 +++++-- common/proxy/proxy.go | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/cluster/cluster_impl/failover_cluster_invoker.go b/cluster/cluster_impl/failover_cluster_invoker.go index 66adabd10..5ff6dd1da 100644 --- a/cluster/cluster_impl/failover_cluster_invoker.go +++ b/cluster/cluster_impl/failover_cluster_invoker.go @@ -19,6 +19,7 @@ package cluster_impl import ( "context" + "fmt" "strconv" ) @@ -91,8 +92,10 @@ func (invoker *failoverClusterInvoker) Invoke(ctx context.Context, invocation pr invokerSvc := invoker.GetUrl().Service() invokerUrl := invoker.directory.GetUrl() return &protocol.RPCResult{ - Err: perrors.Errorf("Failed to invoke the method %v in the service %v. Tried %v times of the providers %v (%v/%v)from the registry %v on the consumer %v using the dubbo version %v. Last error is %v.", - methodName, invokerSvc, retries, providers, len(providers), len(invokers), invokerUrl, ip, constant.Version, result.Error().Error(), + Err: perrors.Wrap(result.Error(), fmt.Sprintf("Failed to invoke the method %v in the service %v. "+ + "Tried %v times of the providers %v (%v/%v)from the registry %v on the consumer %v using the dubbo version %v. "+ + "Last error is %+v.", methodName, invokerSvc, retries, providers, len(providers), len(invokers), + invokerUrl, ip, constant.Version, result.Error().Error()), )} } diff --git a/common/proxy/proxy.go b/common/proxy/proxy.go index abcf87cd9..27fa53876 100644 --- a/common/proxy/proxy.go +++ b/common/proxy/proxy.go @@ -23,6 +23,11 @@ import ( "sync" ) +import ( + "github.com/apache/dubbo-go-hessian2/java_exception" + perrors "github.com/pkg/errors" +) + import ( "github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common/constant" @@ -154,7 +159,17 @@ func (p *Proxy) Implement(v common.RPCService) { } err = result.Error() - logger.Debugf("[makeDubboCallProxy] result: %v, err: %v", result.Result(), err) + if err != nil { + // the cause reason + err = perrors.Cause(err) + if throwabler, ok := err.(java_exception.Throwabler); ok { + logger.Errorf("invoke service throw exception: %v , stackTraceElements: %v", err.Error(), throwabler.GetStackTrace()) + } else { + logger.Errorf("result err: %v", err) + } + } else { + logger.Debugf("[makeDubboCallProxy] result: %v, err: %v", result.Result(), err) + } if len(outs) == 1 { return []reflect.Value{reflect.ValueOf(&err).Elem()} } -- GitLab