diff --git a/cluster/cluster_impl/failover_cluster_invoker.go b/cluster/cluster_impl/failover_cluster_invoker.go
index d81986d02f4743a1f26b8b5597df089d369c174f..5bb2471e06c967159196d754fe04158ad3a96c6b 100644
--- a/cluster/cluster_impl/failover_cluster_invoker.go
+++ b/cluster/cluster_impl/failover_cluster_invoker.go
@@ -93,7 +93,7 @@ func (invoker *failoverClusterInvoker) Invoke(invocation protocol.Invocation) pr
 		}
 	}
 	ip, _ := utils.GetLocalIP()
-	return &protocol.RPCResult{Err: perrors.Errorf("Failed to invoke the method %v in the service %v . Tried %v times of "+
+	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, invoker.GetUrl().Service(), retries, providers, len(providers), len(invokers), invoker.directory.GetUrl(), ip, version.Version, result.Error().Error(),
 	)}
diff --git a/cluster/directory/static_directory.go b/cluster/directory/static_directory.go
index 57093c4ae680ce8a639af4ca23c6e74bcd3f66a7..3ac567b00e37fae3923753a7577121e7a341ae1f 100644
--- a/cluster/directory/static_directory.go
+++ b/cluster/directory/static_directory.go
@@ -25,8 +25,13 @@ type staticDirectory struct {
 }
 
 func NewStaticDirectory(invokers []protocol.Invoker) *staticDirectory {
+	var url common.URL
+
+	if len(invokers) > 0 {
+		url = invokers[0].GetUrl()
+	}
 	return &staticDirectory{
-		BaseDirectory: NewBaseDirectory(&common.URL{}),
+		BaseDirectory: NewBaseDirectory(&url),
 		invokers:      invokers,
 	}
 }
diff --git a/common/url.go b/common/url.go
index 66dfaed6c1f0b2dfc2cd626ca3030f38528a8704..9b0c6352ae781a4f6eacb36e3f727e2b7ac55232 100644
--- a/common/url.go
+++ b/common/url.go
@@ -248,7 +248,16 @@ func (c URL) Context() context.Context {
 }
 
 func (c URL) Service() string {
-	return strings.TrimPrefix(c.Path, "/")
+	service := strings.TrimPrefix(c.Path, "/")
+	if service != "" {
+		return service
+	} else if c.SubURL != nil {
+		service = strings.TrimPrefix(c.SubURL.Path, "/")
+		if service != "" { //if url.path is "" then return suburl's path, special for registry Url
+			return service
+		}
+	}
+	return ""
 }
 func (c URL) GetParam(s string, d string) string {
 	var r string