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