You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@servicecomb.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2018/11/01 01:55:02 UTC

[jira] [Commented] (SCB-993) Bug fixes

    [ https://issues.apache.org/jira/browse/SCB-993?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16671019#comment-16671019 ] 

ASF GitHub Bot commented on SCB-993:
------------------------------------

little-cui closed pull request #477: SCB-993 Optimize log prints
URL: https://github.com/apache/incubator-servicecomb-service-center/pull/477
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/server/api.go b/server/api.go
index 10e8b8c3..5e0be671 100644
--- a/server/api.go
+++ b/server/api.go
@@ -222,7 +222,7 @@ func (s *APIServer) Stop() {
 
 	s.goroutine.Close(true)
 
-	log.Info("api server stopped.")
+	log.Info("api server stopped")
 }
 
 func GetAPIServer() *APIServer {
diff --git a/server/core/backend/lease.go b/server/core/backend/lease.go
index dac84c97..dc58b9ad 100644
--- a/server/core/backend/lease.go
+++ b/server/core/backend/lease.go
@@ -45,12 +45,12 @@ func (lat *LeaseTask) Do(ctx context.Context) (err error) {
 	recv, start := lat.ReceiveTime(), time.Now()
 	lat.TTL, err = lat.Client.LeaseRenew(ctx, lat.LeaseID)
 	if err != nil {
-		log.Errorf(err, "[%s]renew lease %d failed(recv: %s, send: %s), key %s",
+		log.Errorf(err, "[%s]task[%s] renew lease[%d] failed(recv: %s, send: %s)",
 			time.Now().Sub(recv),
+			lat.Key(),
 			lat.LeaseID,
 			recv.Format(leaseProfTimeFmt),
-			start.Format(leaseProfTimeFmt),
-			lat.Key())
+			start.Format(leaseProfTimeFmt))
 		if _, ok := err.(errorsEx.InternalError); !ok {
 			// it means lease not found if err is not the InternalError type
 			lat.err = err
@@ -62,11 +62,12 @@ func (lat *LeaseTask) Do(ctx context.Context) (err error) {
 
 	cost := time.Now().Sub(recv)
 	if cost >= 2*time.Second {
-		log.Warnf("[%s]renew lease %d(recv: %s, send: %s), key %s", cost,
+		log.Warnf("[%s]task[%s] renew lease[%d](recv: %s, send: %s)",
+			cost,
+			lat.Key(),
 			lat.LeaseID,
 			recv.Format(leaseProfTimeFmt),
-			start.Format(leaseProfTimeFmt),
-			lat.Key())
+			start.Format(leaseProfTimeFmt))
 	}
 	return
 }
diff --git a/server/core/backend/registry.go b/server/core/backend/registry.go
index 6e1d3b08..aec6e043 100644
--- a/server/core/backend/registry.go
+++ b/server/core/backend/registry.go
@@ -151,10 +151,10 @@ func (s *registryEngine) registryService(pCtx context.Context) error {
 		return err
 	}
 	if respE.Response.Code == pb.Response_SUCCESS {
-		log.Warnf("service center service already registered, serviceId %s", respE.ServiceId)
+		log.Warnf("service center service[%s] already registered", respE.ServiceId)
 		respG, err := core.ServiceAPI.GetOne(ctx, core.GetServiceRequest(respE.ServiceId))
 		if respG.Response.Code != pb.Response_SUCCESS {
-			log.Errorf(err, "query service center service info failed, serviceId %s", respE.ServiceId)
+			log.Errorf(err, "query service center service[%s] info failed", respE.ServiceId)
 			return fmt.Errorf("service center service file lost.")
 		}
 		core.Service = respG.Service
@@ -167,7 +167,7 @@ func (s *registryEngine) registryService(pCtx context.Context) error {
 		return err
 	}
 	core.Service.ServiceId = respS.ServiceId
-	log.Infof("register service center service '%s'", respS.ServiceId)
+	log.Infof("register service center service[%s]", respS.ServiceId)
 	return nil
 }
 
@@ -179,12 +179,13 @@ func (s *registryEngine) registryInstance(pCtx context.Context) error {
 
 	respI, err := core.InstanceAPI.Register(ctx, core.RegisterInstanceRequest())
 	if respI.Response.Code != pb.Response_SUCCESS {
-		err = fmt.Errorf("register service center instance failed, %s", respI.Response.Message)
+		err = fmt.Errorf("register service center[%s] instance failed, %s",
+			core.Instance.ServiceId, respI.Response.Message)
 		log.Error(err.Error(), nil)
 		return err
 	}
 	core.Instance.InstanceId = respI.InstanceId
-	log.Infof("register service center instance %s/%s, endpoints %s",
+	log.Infof("register service center instance[%s/%s], endpoints is %s",
 		core.Service.ServiceId, respI.InstanceId, core.Instance.Endpoints)
 	return nil
 }
@@ -196,11 +197,12 @@ func (s *registryEngine) unregisterInstance(pCtx context.Context) error {
 	ctx := core.AddDefaultContextValue(pCtx)
 	respI, err := core.InstanceAPI.Unregister(ctx, core.UnregisterInstanceRequest())
 	if respI.Response.Code != pb.Response_SUCCESS {
-		err = fmt.Errorf("unregister service center instance failed, %s", respI.Response.Message)
+		err = fmt.Errorf("unregister service center instance[%s/%s] failed, %s",
+			core.Instance.ServiceId, core.Instance.InstanceId, respI.Response.Message)
 		log.Error(err.Error(), nil)
 		return err
 	}
-	log.Warnf("unregister service center instance %s/%s",
+	log.Warnf("unregister service center instance[%s/%s]",
 		core.Service.ServiceId, core.Instance.InstanceId)
 	return nil
 }
@@ -209,18 +211,18 @@ func (s *registryEngine) sendHeartBeat(pCtx context.Context) {
 	ctx := core.AddDefaultContextValue(pCtx)
 	respI, err := core.InstanceAPI.Heartbeat(ctx, core.HeartbeatRequest())
 	if respI.Response.Code == pb.Response_SUCCESS {
-		log.Debugf("update service center instance %s/%s heartbeat",
+		log.Debugf("update service center instance[%s/%s] heartbeat",
 			core.Instance.ServiceId, core.Instance.InstanceId)
 		return
 	}
-	log.Errorf(err, "update service center instance %s/%s heartbeat failed",
+	log.Errorf(err, "update service center instance[%s/%s] heartbeat failed",
 		core.Instance.ServiceId, core.Instance.InstanceId)
 
 	//服务不存在,创建服务
 	err = s.selfRegister(pCtx)
 	if err != nil {
-		log.Errorf(err, "retry to register %s/%s/%s failed.",
-			core.Service.AppId, core.Service.ServiceName, core.Service.Version)
+		log.Errorf(err, "retry to register[%s/%s/%s/%s] failed",
+			core.Service.Environment, core.Service.AppId, core.Service.ServiceName, core.Service.Version)
 	}
 }
 
diff --git a/server/core/proto/services.pb.go b/server/core/proto/services.pb.go
index 48d328f3..ebc8a271 100644
--- a/server/core/proto/services.pb.go
+++ b/server/core/proto/services.pb.go
@@ -1,20 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: services.proto
 
@@ -1859,6 +1842,7 @@ type FindInstancesRequest struct {
 	ServiceName       string   `protobuf:"bytes,3,opt,name=serviceName" json:"serviceName,omitempty"`
 	VersionRule       string   `protobuf:"bytes,4,opt,name=versionRule" json:"versionRule,omitempty"`
 	Tags              []string `protobuf:"bytes,5,rep,name=tags" json:"tags,omitempty"`
+	Environment       string   `protobuf:"bytes,6,opt,name=environment" json:"environment,omitempty"`
 }
 
 func (m *FindInstancesRequest) Reset()                    { *m = FindInstancesRequest{} }
@@ -1901,6 +1885,13 @@ func (m *FindInstancesRequest) GetTags() []string {
 	return nil
 }
 
+func (m *FindInstancesRequest) GetEnvironment() string {
+	if m != nil {
+		return m.Environment
+	}
+	return ""
+}
+
 type FindInstancesResponse struct {
 	Response  *Response               `protobuf:"bytes,1,opt,name=response" json:"response,omitempty"`
 	Instances []*MicroServiceInstance `protobuf:"bytes,2,rep,name=instances" json:"instances,omitempty"`
@@ -4243,221 +4234,221 @@ var _GovernServiceCtrl_serviceDesc = grpc.ServiceDesc{
 func init() { proto1.RegisterFile("services.proto", fileDescriptor0) }
 
 var fileDescriptor0 = []byte{
-	// 3447 bytes of a gzipped FileDescriptorProto
+	// 3451 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5c, 0xdd, 0x8f, 0x1c, 0xc5,
 	0xb5, 0x57, 0xcd, 0xce, 0xec, 0xcc, 0x9c, 0xfd, 0xb0, 0xb7, 0xbc, 0xeb, 0x6d, 0x0f, 0x5c, 0xae,
 	0xd5, 0x42, 0xba, 0x3c, 0xa0, 0xbd, 0xb0, 0x5c, 0xc0, 0xd7, 0xd8, 0x98, 0xfd, 0x30, 0xf6, 0x1a,
 	0x8c, 0x4d, 0xcf, 0x62, 0x07, 0x48, 0x82, 0x7a, 0x67, 0x6a, 0x67, 0x1a, 0xcf, 0x74, 0x37, 0xdd,
 	0x3d, 0x6b, 0x46, 0x8a, 0x14, 0x81, 0x20, 0x21, 0x21, 0x81, 0xa0, 0x24, 0x4f, 0x3c, 0x24, 0x4a,
-	0xc2, 0x63, 0xa4, 0x24, 0x8a, 0x84, 0x22, 0x94, 0x28, 0x4a, 0x94, 0x37, 0x78, 0x8c, 0xf2, 0x94,
-	0xbc, 0x47, 0xca, 0x5b, 0xfe, 0x80, 0x44, 0xf5, 0xd1, 0xdd, 0xd5, 0x1f, 0xbb, 0x3b, 0xdd, 0x3d,
-	0x0d, 0xca, 0xd3, 0x76, 0x55, 0x4f, 0x9d, 0x3a, 0x55, 0xe7, 0xa3, 0xce, 0xf9, 0xd5, 0xd9, 0x86,
-	0x45, 0x97, 0x38, 0x07, 0x46, 0x87, 0xb8, 0x6b, 0xb6, 0x63, 0x79, 0x16, 0xfe, 0x9f, 0x8e, 0x35,
-	0x5c, 0xeb, 0x8f, 0xf4, 0xbb, 0xc4, 0x58, 0xb3, 0x75, 0xdd, 0x5d, 0xeb, 0xb8, 0x64, 0x4d, 0xfc,
-	0xc6, 0x21, 0x3d, 0xc3, 0xf5, 0x9c, 0xf1, 0x9a, 0x6e, 0x1b, 0xea, 0xd7, 0x61, 0xf9, 0xba, 0xd5,
-	0x35, 0xf6, 0xc7, 0xed, 0x4e, 0x9f, 0x0c, 0x75, 0x57, 0x23, 0xaf, 0x8d, 0x88, 0xeb, 0xe1, 0x7b,
-	0xa1, 0x29, 0x7e, 0xbe, 0xd3, 0x55, 0xd0, 0x59, 0xf4, 0x40, 0x53, 0x0b, 0x3b, 0xf0, 0x0e, 0xd4,
-	0x5d, 0xfe, 0x7b, 0xa5, 0x72, 0x76, 0xe6, 0x81, 0xb9, 0xf5, 0xff, 0x5d, 0x9b, 0x70, 0xc2, 0x35,
-	0x3e, 0x8f, 0xe6, 0x8f, 0x57, 0x6f, 0xc1, 0x2c, 0xef, 0xc2, 0x2d, 0x68, 0xf0, 0xce, 0x60, 0xc6,
-	0xa0, 0x8d, 0x15, 0xa8, 0xbb, 0xa3, 0xe1, 0x50, 0x77, 0xc6, 0x4a, 0x85, 0xbd, 0xf2, 0x9b, 0xf8,
-	0x34, 0xcc, 0xf2, 0x5f, 0x29, 0x33, 0xec, 0x85, 0x68, 0xa9, 0xfb, 0xb0, 0x12, 0x5b, 0x98, 0x6b,
-	0x5b, 0xa6, 0x4b, 0xf0, 0x75, 0x68, 0x38, 0xe2, 0x99, 0x4d, 0x33, 0xb7, 0xfe, 0xf0, 0xc4, 0xcc,
-	0xfb, 0x44, 0xb4, 0x80, 0x84, 0xfa, 0x1a, 0x9c, 0xba, 0x4a, 0x74, 0xc7, 0xdb, 0x23, 0xba, 0xd7,
-	0x26, 0x9e, 0xbf, 0x7f, 0x2f, 0x41, 0xd3, 0x30, 0x5d, 0x4f, 0x37, 0x3b, 0xc4, 0x55, 0x10, 0xdb,
-	0xa3, 0x0b, 0x13, 0x4f, 0x23, 0x13, 0xbc, 0x3c, 0x20, 0x43, 0x62, 0x7a, 0x5a, 0x48, 0x4e, 0x6d,
-	0x47, 0xa7, 0x14, 0xbf, 0x38, 0x46, 0x64, 0xf7, 0x01, 0xf8, 0x14, 0x76, 0xba, 0x62, 0x13, 0xa5,
-	0x1e, 0xf5, 0x13, 0x04, 0xcb, 0xd1, 0x85, 0x94, 0xb2, 0x5f, 0x78, 0x57, 0xde, 0x18, 0xae, 0x3c,
-	0x8f, 0x4d, 0x4c, 0x6f, 0x47, 0x8c, 0xbc, 0xba, 0xa7, 0xb9, 0x91, 0x2d, 0x19, 0xc2, 0x42, 0xe4,
-	0x5d, 0xb1, 0xcd, 0xa0, 0xef, 0x89, 0xe3, 0x5c, 0x27, 0xae, 0xab, 0xf7, 0x88, 0x50, 0x2c, 0xa9,
-	0x47, 0xdd, 0x82, 0x66, 0xdb, 0x6b, 0x73, 0x72, 0x78, 0x19, 0x6a, 0x1d, 0x6b, 0x64, 0x7a, 0x6c,
-	0x9a, 0x19, 0x8d, 0x37, 0xf0, 0x59, 0x98, 0xb3, 0xcc, 0x81, 0x61, 0x92, 0x2d, 0xf6, 0xae, 0xc2,
-	0xde, 0xc9, 0x5d, 0xea, 0x55, 0x80, 0xb6, 0xe7, 0x73, 0x7d, 0x08, 0x95, 0xfb, 0x61, 0x81, 0x3d,
-	0x6c, 0x8e, 0xb7, 0xad, 0xa1, 0x6e, 0x98, 0x82, 0x4e, 0xb4, 0x53, 0xfd, 0x2f, 0xa8, 0xb5, 0xbd,
-	0x0d, 0xdb, 0x4e, 0x27, 0xa2, 0xfe, 0x13, 0xd1, 0x99, 0x74, 0xcf, 0x70, 0x3d, 0xa3, 0xe3, 0xe2,
-	0xe7, 0xa0, 0xe1, 0x7b, 0x0b, 0x21, 0xd0, 0xf5, 0xc9, 0xad, 0xd7, 0x5f, 0xb5, 0x16, 0xd0, 0xc0,
-	0xcf, 0x47, 0x25, 0x4a, 0x09, 0x3e, 0x92, 0x81, 0xa0, 0xbf, 0x03, 0x92, 0x38, 0xf1, 0x26, 0x54,
-	0x75, 0xdb, 0x76, 0xd9, 0xce, 0xcf, 0xad, 0xaf, 0x65, 0xa0, 0xb6, 0x61, 0xdb, 0x1a, 0x1b, 0xab,
-	0xbe, 0x83, 0xe0, 0xf4, 0x15, 0xe2, 0xf3, 0xeb, 0xee, 0x98, 0xfb, 0x96, 0x6f, 0x9c, 0x0a, 0xd4,
-	0x2d, 0xdb, 0x33, 0x2c, 0x93, 0x9b, 0x66, 0x53, 0xf3, 0x9b, 0x74, 0x03, 0x75, 0xdb, 0x0e, 0x74,
-	0x82, 0x37, 0xa8, 0x2c, 0xc5, 0x6c, 0xcf, 0xe9, 0x43, 0x5f, 0x1f, 0xe4, 0x2e, 0xaa, 0x6e, 0x6c,
-	0xaf, 0x6f, 0x98, 0x83, 0xb1, 0x52, 0x3d, 0x8b, 0x1e, 0x68, 0x68, 0x61, 0x87, 0xfa, 0xd3, 0x0a,
-	0xac, 0x26, 0x58, 0x29, 0xc7, 0xbc, 0xba, 0xb0, 0xa4, 0x0f, 0x06, 0xfe, 0x4c, 0xdb, 0xc4, 0xd3,
-	0x8d, 0x41, 0x66, 0x33, 0x13, 0xc3, 0xf9, 0x68, 0x2d, 0x49, 0x10, 0xb7, 0x01, 0xdc, 0x40, 0xa1,
-	0x84, 0x94, 0xb2, 0xc8, 0xdc, 0x1f, 0xaa, 0x49, 0x64, 0xd4, 0xcf, 0x10, 0x9c, 0xb8, 0x6e, 0x74,
-	0x1c, 0x4b, 0x4c, 0xf6, 0x0c, 0x61, 0xde, 0xdd, 0x23, 0xa6, 0x2e, 0x34, 0xba, 0xa9, 0x89, 0x16,
-	0x95, 0xa0, 0xed, 0x58, 0xaf, 0x92, 0x8e, 0xe7, 0x9f, 0x07, 0xa2, 0x19, 0x4a, 0x70, 0xe6, 0x08,
-	0x09, 0x56, 0x93, 0x12, 0x54, 0xa0, 0x7e, 0x40, 0x1c, 0xd7, 0xb0, 0x4c, 0xa5, 0xc6, 0x29, 0x8a,
-	0x26, 0x1d, 0x4b, 0xcc, 0x03, 0xc3, 0xb1, 0x4c, 0xea, 0x66, 0x95, 0x59, 0x3e, 0x56, 0xea, 0x62,
-	0x73, 0x0e, 0x0c, 0xdd, 0x55, 0xea, 0x62, 0x4e, 0xda, 0x50, 0x3f, 0xad, 0xc3, 0xbc, 0xbc, 0x9e,
-	0x63, 0x7c, 0x52, 0x5e, 0xd5, 0x93, 0x18, 0xaf, 0x26, 0x18, 0xef, 0x12, 0xb7, 0xe3, 0x18, 0x4c,
-	0xb9, 0xc5, 0xb2, 0xe4, 0x2e, 0x3a, 0xe7, 0x80, 0x1c, 0x90, 0x81, 0x58, 0x14, 0x6f, 0xb0, 0xc3,
-	0x56, 0x9c, 0xee, 0x75, 0x6e, 0x1e, 0xa2, 0x89, 0xaf, 0x41, 0xcd, 0xd6, 0xbd, 0xbe, 0xab, 0x00,
-	0xd3, 0xa8, 0xff, 0xcb, 0xaa, 0x51, 0x37, 0x75, 0xaf, 0xaf, 0x71, 0x12, 0xec, 0xe0, 0xf6, 0x74,
-	0x6f, 0xe4, 0x2a, 0x0d, 0x71, 0x70, 0xb3, 0x16, 0x26, 0x00, 0xb6, 0x63, 0xd9, 0xc4, 0xf1, 0x0c,
-	0xe2, 0x2a, 0x4d, 0x36, 0xd1, 0xe5, 0x89, 0x27, 0x92, 0x37, 0x7c, 0xed, 0x66, 0x40, 0xe7, 0xb2,
-	0xe9, 0x39, 0x63, 0x4d, 0x22, 0x4c, 0x85, 0xe1, 0x19, 0x43, 0xe2, 0x7a, 0xfa, 0xd0, 0x56, 0xe6,
-	0xb8, 0x30, 0x82, 0x0e, 0x7c, 0x0b, 0x9a, 0xb6, 0x63, 0x1d, 0x18, 0x5d, 0xe2, 0xb8, 0xca, 0x3c,
-	0xe3, 0xe1, 0x5c, 0x2e, 0x1e, 0x9e, 0x21, 0x63, 0x2d, 0x24, 0x15, 0x6a, 0xca, 0x82, 0xa4, 0x29,
-	0x74, 0xc9, 0xcf, 0x6e, 0xb6, 0x3d, 0x47, 0xf7, 0x48, 0x6f, 0xac, 0x2c, 0x16, 0x59, 0x72, 0x48,
-	0x47, 0x2c, 0x39, 0xec, 0xc0, 0x2a, 0xcc, 0x0f, 0xad, 0xee, 0x6e, 0xb0, 0xea, 0x13, 0x8c, 0x87,
-	0x48, 0x5f, 0x5c, 0xd9, 0x4f, 0x26, 0x95, 0xfd, 0x3e, 0x00, 0x3e, 0x3d, 0x71, 0x36, 0xc7, 0xca,
-	0x12, 0x3f, 0x1b, 0xc3, 0x1e, 0xfc, 0x25, 0x68, 0xee, 0x3b, 0xfa, 0x90, 0xdc, 0xb5, 0x9c, 0x3b,
-	0x0a, 0x66, 0xae, 0xe1, 0xfc, 0xc4, 0x6b, 0x79, 0x9a, 0x8e, 0xbc, 0x6d, 0x39, 0x77, 0x84, 0xe8,
-	0xc6, 0x5a, 0x48, 0xac, 0x75, 0x11, 0x4e, 0xc4, 0x24, 0x8a, 0x4f, 0xc2, 0xcc, 0x1d, 0x32, 0x16,
-	0xc6, 0x44, 0x1f, 0xe9, 0x0e, 0x1f, 0xe8, 0x83, 0x11, 0xf1, 0xcd, 0x88, 0x35, 0xce, 0x57, 0xce,
-	0x21, 0x3a, 0x3c, 0xb6, 0x3b, 0x59, 0x86, 0xab, 0x1b, 0xb0, 0x94, 0xe0, 0x0e, 0x63, 0xa8, 0x9a,
-	0xd4, 0x2e, 0x39, 0x05, 0xf6, 0x2c, 0x1b, 0x64, 0x25, 0x62, 0x90, 0xea, 0x5f, 0x11, 0xcc, 0xf9,
-	0xe7, 0xe7, 0x68, 0x40, 0xa8, 0x09, 0x38, 0xa3, 0x41, 0xe8, 0x0d, 0x44, 0x8b, 0x46, 0xc2, 0xf4,
-	0x69, 0x77, 0x6c, 0xfb, 0x7c, 0x04, 0x6d, 0xaa, 0xb7, 0xba, 0xe7, 0x39, 0xc6, 0xde, 0xc8, 0xf3,
-	0xdd, 0x41, 0xd8, 0xc1, 0xfc, 0xa2, 0xee, 0x79, 0xc4, 0x09, 0x9c, 0x81, 0x68, 0x4e, 0xe0, 0x0c,
-	0x22, 0x16, 0x31, 0x1b, 0xb7, 0x88, 0xb8, 0xf2, 0xd4, 0x93, 0xca, 0xa3, 0xbe, 0x87, 0xe0, 0xf4,
-	0x46, 0xb7, 0x7b, 0xc3, 0x79, 0xc1, 0xee, 0xea, 0x1e, 0x91, 0x97, 0x2a, 0x2f, 0x09, 0x1d, 0xb5,
-	0xa4, 0xca, 0x11, 0x4b, 0x9a, 0x39, 0x72, 0x49, 0xd5, 0xc4, 0x92, 0xd4, 0xdf, 0x85, 0x1b, 0x4e,
-	0x5d, 0x0f, 0x15, 0x17, 0x75, 0x3e, 0xbe, 0xb8, 0xe8, 0x33, 0xfe, 0x2a, 0x34, 0x84, 0x5b, 0x18,
-	0x8b, 0x83, 0x72, 0x33, 0x8f, 0x5b, 0xf3, 0x9d, 0x8d, 0xb0, 0xbb, 0x80, 0x66, 0xeb, 0x09, 0x58,
-	0x88, 0xbc, 0xca, 0xa4, 0x74, 0xe7, 0xa0, 0x11, 0x44, 0x0a, 0x18, 0xaa, 0x1d, 0xab, 0xcb, 0xb7,
-	0xaf, 0xa6, 0xb1, 0x67, 0xba, 0x39, 0x43, 0x11, 0xa5, 0x0a, 0x5d, 0x13, 0x4d, 0xf5, 0x2f, 0x08,
-	0x4e, 0x5d, 0x21, 0xde, 0xe5, 0xd7, 0xa9, 0x5d, 0xd2, 0xf0, 0x4a, 0xc4, 0x3e, 0x18, 0xaa, 0x5e,
-	0x28, 0x04, 0xf6, 0x5c, 0xc2, 0xd1, 0x13, 0x39, 0xea, 0x6a, 0xf1, 0xa3, 0x4e, 0xce, 0xf4, 0x66,
-	0x63, 0x99, 0x5e, 0xcc, 0x01, 0xd5, 0x13, 0x0e, 0x48, 0xfd, 0x0d, 0x82, 0xe5, 0xe8, 0xca, 0xca,
-	0x09, 0xa5, 0x22, 0x6b, 0xa8, 0x1c, 0xb5, 0x86, 0x99, 0xc3, 0xb3, 0xd5, 0x6a, 0x24, 0x5b, 0x55,
-	0x7f, 0x39, 0x03, 0xcb, 0x5b, 0x0e, 0x91, 0x8c, 0x43, 0x88, 0xe5, 0x06, 0xd4, 0x05, 0x6d, 0xc1,
-	0xfa, 0xa3, 0xb9, 0xfc, 0xbf, 0xe6, 0x53, 0xc1, 0x2f, 0x40, 0x8d, 0x1a, 0x98, 0x9f, 0x63, 0x5d,
-	0x9a, 0x98, 0x5c, 0xba, 0x01, 0x6b, 0x9c, 0x1a, 0x7e, 0x19, 0xaa, 0x9e, 0xde, 0xa3, 0x31, 0x1f,
-	0xa5, 0x7a, 0x65, 0x62, 0xaa, 0x69, 0x8b, 0x5e, 0xdb, 0xd5, 0x7b, 0xe2, 0x64, 0x66, 0x44, 0xf1,
-	0xcb, 0x72, 0x26, 0x51, 0x65, 0x33, 0x5c, 0xcc, 0xb5, 0x0d, 0x29, 0x39, 0x45, 0xeb, 0x71, 0x68,
-	0x06, 0xf3, 0x65, 0xb2, 0xc1, 0xb7, 0x10, 0xac, 0xc4, 0xd8, 0xff, 0x02, 0x14, 0x4e, 0xbd, 0x06,
-	0xcb, 0xdb, 0x64, 0x40, 0x12, 0x9a, 0x73, 0x6c, 0x54, 0xb9, 0x6f, 0x39, 0x1d, 0xbe, 0xac, 0x86,
-	0xc6, 0x1b, 0xea, 0x3e, 0xac, 0xc4, 0x68, 0x95, 0x03, 0x8e, 0x3c, 0x0c, 0x4b, 0x61, 0xde, 0x33,
-	0x11, 0xc3, 0xea, 0xaf, 0x11, 0x60, 0x79, 0x4c, 0x39, 0x5b, 0x2d, 0x99, 0x5b, 0x65, 0x1a, 0xe6,
-	0xa6, 0x2e, 0xcb, 0x5c, 0xfb, 0x28, 0x9a, 0xfa, 0x31, 0x77, 0xc2, 0x61, 0x77, 0x39, 0xab, 0x79,
-	0x5e, 0xca, 0xe8, 0xb9, 0xb9, 0xe7, 0x5c, 0x4e, 0x40, 0x46, 0xfd, 0x07, 0x82, 0x33, 0x11, 0x27,
-	0x40, 0xcf, 0xb0, 0x09, 0xd1, 0x41, 0x27, 0x12, 0xc1, 0x73, 0x86, 0xb4, 0x89, 0x19, 0x3a, 0x74,
-	0xd6, 0xa3, 0xc2, 0xf9, 0x82, 0xb1, 0xa1, 0x7a, 0x07, 0x5a, 0x69, 0xf3, 0x96, 0x63, 0x15, 0x8f,
-	0xc9, 0xc0, 0x04, 0x75, 0xae, 0xee, 0xc4, 0xa6, 0xb1, 0x9a, 0x18, 0x58, 0x8e, 0x46, 0x5d, 0x8b,
-	0x9e, 0x1e, 0x99, 0x13, 0x3d, 0xe9, 0xc8, 0x50, 0x3f, 0x42, 0xa0, 0x24, 0xcf, 0x93, 0x89, 0x34,
-	0x29, 0x0c, 0x90, 0x2b, 0x91, 0x00, 0xb9, 0x0d, 0x55, 0xfa, 0x24, 0x90, 0x87, 0xc2, 0x67, 0x1b,
-	0x23, 0xa6, 0xbe, 0x1a, 0xd3, 0x78, 0xce, 0x66, 0x39, 0x2a, 0xf0, 0x5d, 0x1e, 0x29, 0x67, 0xd6,
-	0x81, 0x92, 0x8e, 0x75, 0xf5, 0x4d, 0x04, 0xab, 0x09, 0x7e, 0xca, 0x51, 0x2d, 0x05, 0xea, 0x1a,
-	0x93, 0x22, 0x5f, 0x43, 0x53, 0xf3, 0x9b, 0x6a, 0x1b, 0xce, 0x44, 0x4f, 0xa5, 0xc9, 0xb7, 0x45,
-	0x81, 0xba, 0x13, 0x25, 0x2a, 0x9a, 0xd4, 0xb2, 0xd3, 0x88, 0x96, 0x23, 0xd6, 0x47, 0x61, 0x25,
-	0x34, 0x50, 0x1a, 0x6d, 0x4c, 0x66, 0xd8, 0xff, 0x8a, 0x40, 0x95, 0x7c, 0x5c, 0x39, 0x9b, 0xff,
-	0x15, 0x11, 0xbe, 0x71, 0xed, 0xd9, 0x99, 0x98, 0x54, 0x3a, 0x77, 0xf1, 0x00, 0x2e, 0x7f, 0x8c,
-	0xf5, 0x0a, 0xac, 0x46, 0x74, 0x73, 0x57, 0xef, 0x4d, 0x26, 0x78, 0x31, 0x49, 0x25, 0x65, 0x92,
-	0x19, 0x69, 0x12, 0xd5, 0x88, 0xf9, 0x20, 0x36, 0x41, 0x39, 0x4a, 0xf0, 0x29, 0x82, 0x95, 0xd0,
-	0x96, 0x26, 0xd6, 0x02, 0xfc, 0xe5, 0x88, 0x6c, 0xae, 0x66, 0xb1, 0xec, 0xe4, 0x5c, 0xd3, 0x13,
-	0x4d, 0x4f, 0xf6, 0x54, 0x25, 0xea, 0xa6, 0xfa, 0x2c, 0x28, 0x11, 0x4b, 0x9d, 0x7c, 0xe7, 0x30,
-	0x54, 0xef, 0x90, 0xb1, 0x6f, 0xfa, 0xec, 0x99, 0x7a, 0xf3, 0x14, 0x6a, 0xe5, 0x70, 0x3e, 0x86,
-	0xb9, 0xab, 0x44, 0x1f, 0x78, 0xfd, 0xad, 0x3e, 0xe9, 0xdc, 0xa1, 0xec, 0x0c, 0xfd, 0x44, 0xbd,
-	0xa9, 0xb1, 0x67, 0x86, 0x3c, 0x58, 0x0e, 0x47, 0xab, 0x6b, 0x1a, 0x7b, 0xa6, 0x29, 0xa4, 0x61,
-	0x7a, 0xc4, 0x39, 0xd0, 0x07, 0x4c, 0x59, 0x6b, 0x5a, 0xd0, 0xa6, 0xf2, 0x60, 0xd8, 0x0b, 0x4b,
-	0x20, 0x6b, 0x1a, 0x6f, 0x50, 0xb9, 0x8d, 0x9c, 0x81, 0x48, 0xa8, 0xe9, 0xa3, 0xfa, 0xf7, 0x2a,
-	0x2c, 0xa7, 0x65, 0x3e, 0xb1, 0x2b, 0x2e, 0x94, 0xb8, 0xe2, 0x3a, 0x3a, 0xbb, 0xbd, 0x17, 0x9a,
-	0xc4, 0xec, 0xda, 0x96, 0x61, 0x7a, 0x3c, 0xd7, 0x6b, 0x6a, 0x61, 0x07, 0x65, 0xbc, 0x6f, 0xb9,
-	0x9e, 0x04, 0xa5, 0x07, 0x6d, 0x09, 0xd6, 0xad, 0x45, 0x60, 0xdd, 0x61, 0x24, 0x28, 0x9c, 0x65,
-	0x3a, 0x7e, 0xbd, 0x50, 0x72, 0x77, 0x24, 0xbc, 0x7b, 0x0b, 0xe6, 0xfa, 0xa1, 0x48, 0x18, 0x8c,
-	0x90, 0x25, 0x8c, 0x91, 0xc4, 0xa9, 0xc9, 0x84, 0xa2, 0x20, 0x59, 0x23, 0x0e, 0x92, 0xbd, 0x02,
-	0x8b, 0x5d, 0xdd, 0xd3, 0xb7, 0x08, 0x15, 0xe3, 0x8e, 0xb9, 0x6f, 0x29, 0x4d, 0x36, 0xf1, 0xe3,
-	0x13, 0x4f, 0xbc, 0x1d, 0x19, 0xae, 0xc5, 0xc8, 0x25, 0x50, 0x38, 0x48, 0x81, 0x70, 0x25, 0x54,
-	0x66, 0x2e, 0x82, 0xca, 0x14, 0x0d, 0x92, 0xf7, 0x60, 0x31, 0xca, 0x5e, 0x2a, 0xfc, 0x49, 0x63,
-	0x36, 0xd2, 0x0b, 0xd1, 0x4f, 0xd1, 0xc2, 0xf7, 0xc3, 0x82, 0x7e, 0xa0, 0x1b, 0x03, 0x7d, 0x6f,
-	0x40, 0x5e, 0xb2, 0x4c, 0xdf, 0x3f, 0x47, 0x3b, 0xd5, 0xdb, 0xb0, 0x9a, 0x26, 0xeb, 0x67, 0xc8,
-	0xb8, 0x98, 0x46, 0xab, 0x1e, 0xac, 0x6a, 0x02, 0xa4, 0x0e, 0xd0, 0x01, 0xe1, 0x5c, 0x5e, 0xa4,
-	0x76, 0xc8, 0xbb, 0x84, 0x37, 0x28, 0x88, 0x3a, 0x04, 0xe4, 0xd4, 0x6f, 0x21, 0x50, 0x92, 0xd3,
-	0x96, 0x73, 0xb6, 0x1f, 0x77, 0xc3, 0xff, 0x22, 0x9c, 0x79, 0xc1, 0x74, 0x0e, 0xd9, 0x83, 0x62,
-	0xc5, 0x03, 0x34, 0x7d, 0x4a, 0x21, 0x5d, 0x8e, 0xb7, 0xbd, 0x09, 0x27, 0x83, 0x42, 0x85, 0xe9,
-	0xb0, 0xbf, 0x07, 0x4b, 0x12, 0xc5, 0x72, 0xb8, 0xfe, 0x15, 0x82, 0xe5, 0xa7, 0x0d, 0xb3, 0xeb,
-	0xef, 0x4e, 0x70, 0xb4, 0x3d, 0x08, 0x4b, 0x1d, 0xcb, 0x74, 0x47, 0x43, 0xe2, 0xb4, 0x63, 0x4b,
-	0x48, 0xbe, 0xc8, 0x0d, 0xd5, 0x9e, 0x85, 0x39, 0xe1, 0x05, 0x68, 0x00, 0xec, 0x63, 0xe5, 0x52,
-	0x17, 0x03, 0x86, 0x69, 0xf8, 0x51, 0xe3, 0x87, 0x28, 0x7d, 0x56, 0xff, 0x88, 0x60, 0x25, 0xc6,
-	0x74, 0x39, 0xba, 0xfb, 0x72, 0xb2, 0x2a, 0x64, 0x6a, 0xc8, 0x9f, 0xfa, 0x31, 0x62, 0x61, 0xf9,
-	0x0d, 0x93, 0xc4, 0xb5, 0x3e, 0xdb, 0xde, 0x3f, 0x08, 0x4b, 0xfe, 0x4d, 0x5e, 0x3b, 0xe6, 0x68,
-	0x92, 0x2f, 0xf0, 0x1a, 0x60, 0xbf, 0x73, 0x27, 0x54, 0x3e, 0x2e, 0x9a, 0x94, 0x37, 0xc1, 0xfe,
-	0x57, 0xa5, 0xfd, 0xff, 0x03, 0x4f, 0x0c, 0x22, 0x9c, 0x97, 0x23, 0x00, 0xd9, 0x07, 0x56, 0xa6,
-	0xeb, 0x03, 0xdf, 0xe6, 0x20, 0x58, 0x41, 0xc5, 0xcf, 0xb6, 0xf9, 0x58, 0x82, 0xa9, 0xa5, 0xcd,
-	0x5c, 0x8e, 0xf2, 0xf1, 0x1f, 0xa8, 0xcb, 0x2e, 0xdc, 0xc3, 0xf3, 0x18, 0xff, 0x65, 0x9b, 0x85,
-	0x57, 0x53, 0xf1, 0x83, 0x52, 0xec, 0x36, 0x23, 0xc7, 0x6e, 0xea, 0x10, 0xee, 0x4d, 0x9f, 0xb4,
-	0x1c, 0x57, 0xf9, 0x5e, 0xc5, 0x47, 0xe3, 0xfc, 0xf9, 0x32, 0x80, 0x8f, 0xc7, 0xad, 0xd1, 0x8d,
-	0xc4, 0xa1, 0xfc, 0x1a, 0xa3, 0x9d, 0x11, 0x9c, 0x4c, 0x63, 0xab, 0x4c, 0x74, 0x72, 0x10, 0x17,
-	0x7a, 0xa9, 0xf0, 0xe4, 0x05, 0x58, 0xbe, 0xad, 0x7b, 0x9d, 0x7e, 0xdc, 0x59, 0xde, 0x0f, 0x0b,
-	0x2e, 0x19, 0xec, 0xc7, 0x6d, 0x35, 0xda, 0xa9, 0x7e, 0x54, 0x81, 0x95, 0xd8, 0xf0, 0x72, 0xcc,
-	0xec, 0x34, 0xcc, 0xea, 0x1d, 0x4f, 0x8a, 0x33, 0x79, 0x0b, 0x5f, 0xe3, 0x1b, 0xcb, 0xa1, 0xc1,
-	0xfc, 0x45, 0x1b, 0x4c, 0x24, 0xb2, 0x57, 0xac, 0x4e, 0xd7, 0x2b, 0x3e, 0x0b, 0x27, 0xaf, 0x10,
-	0x4f, 0x54, 0xc3, 0x4e, 0xa4, 0xd9, 0xf2, 0x8d, 0x63, 0x25, 0x7a, 0xe3, 0xa8, 0xb6, 0x99, 0x8b,
-	0xdd, 0x18, 0x0c, 0xb2, 0x10, 0xbc, 0x0f, 0xe0, 0xae, 0xe1, 0xf5, 0xf9, 0x10, 0x71, 0x41, 0x24,
-	0xf5, 0xa8, 0x3f, 0x46, 0xfc, 0xfa, 0x46, 0x90, 0x2c, 0x4d, 0x8c, 0x6e, 0xc8, 0x40, 0x50, 0xbf,
-	0xcb, 0xb4, 0x8d, 0x3d, 0xb5, 0xc5, 0x4d, 0xaa, 0x48, 0x17, 0x22, 0x9d, 0xea, 0x2f, 0xb8, 0x4f,
-	0x97, 0x16, 0x5e, 0x0e, 0x97, 0x53, 0x2c, 0x78, 0xbe, 0x01, 0xa7, 0x04, 0x30, 0x31, 0x25, 0xd9,
-	0x93, 0xe0, 0x62, 0xb0, 0xcc, 0x2d, 0x50, 0xdf, 0x40, 0x70, 0x4a, 0xae, 0xa8, 0x2e, 0xcc, 0xf8,
-	0x61, 0xa5, 0xdb, 0x47, 0x5c, 0x9f, 0x93, 0x68, 0xb5, 0x7a, 0x79, 0x78, 0xce, 0xe9, 0x8d, 0x6e,
-	0x77, 0x9b, 0xd8, 0xc4, 0xec, 0x12, 0xb3, 0x63, 0x84, 0x31, 0xcb, 0x2b, 0x30, 0xdf, 0x95, 0xba,
-	0x45, 0x65, 0xf7, 0x13, 0x93, 0x5f, 0x83, 0x8b, 0xb8, 0x26, 0xa0, 0x3d, 0xd6, 0x22, 0x04, 0xd5,
-	0x3e, 0xc3, 0xe1, 0xa3, 0x53, 0x97, 0xb3, 0xc8, 0xaf, 0xc1, 0x19, 0x7e, 0xab, 0xfd, 0x85, 0xac,
-	0xf3, 0x6f, 0x08, 0x70, 0xf2, 0x47, 0x78, 0x17, 0x1a, 0x7e, 0xe8, 0x27, 0xd6, 0x98, 0xdf, 0x83,
-	0x07, 0x94, 0xa2, 0xd5, 0x7c, 0x95, 0xe9, 0x55, 0xf3, 0xb5, 0xa0, 0x61, 0x1d, 0x10, 0xc7, 0x31,
-	0xba, 0x3c, 0xe7, 0x6a, 0x68, 0x41, 0x9b, 0xa6, 0xc4, 0x69, 0xdb, 0x5b, 0x8e, 0x2c, 0x4d, 0x96,
-	0x26, 0xa4, 0x09, 0xf2, 0xd8, 0x13, 0xc0, 0xd5, 0x87, 0x44, 0xaa, 0x2d, 0x6f, 0x68, 0x52, 0x0f,
-	0xb5, 0x50, 0xd3, 0x6a, 0x93, 0xc1, 0xbe, 0x58, 0x9e, 0x68, 0xa9, 0xbf, 0x47, 0xd0, 0xba, 0x42,
-	0xbc, 0x2d, 0xcb, 0xfc, 0x1c, 0x56, 0x87, 0xdb, 0x49, 0xf1, 0xe5, 0xbc, 0xdf, 0x0e, 0xe9, 0xf8,
-	0x4b, 0xb8, 0xe9, 0x58, 0x9f, 0xd3, 0x12, 0x7c, 0x6d, 0x2c, 0xba, 0x84, 0x80, 0x8e, 0xfa, 0x93,
-	0x59, 0x58, 0x88, 0x94, 0x6a, 0xe3, 0x17, 0x61, 0x7e, 0x28, 0xfd, 0xb8, 0x58, 0x29, 0x51, 0x84,
-	0x54, 0xa9, 0x59, 0x0d, 0x7e, 0x1e, 0xe6, 0xc4, 0xa9, 0x60, 0xee, 0x5b, 0x7e, 0x54, 0x9e, 0xf9,
-	0x88, 0x95, 0x69, 0x84, 0x37, 0xd8, 0xd5, 0xc2, 0x37, 0xd8, 0x51, 0x05, 0xac, 0x4d, 0x47, 0x01,
-	0xa3, 0x2a, 0x31, 0x3b, 0x1d, 0x95, 0xc0, 0xbb, 0x22, 0xef, 0xad, 0x33, 0x7a, 0x4f, 0xe5, 0xab,
-	0xf8, 0x4f, 0xd4, 0x65, 0xad, 0xc3, 0xb2, 0xac, 0x0b, 0xb7, 0x38, 0x6a, 0xe4, 0x2a, 0x0d, 0x96,
-	0x5d, 0xa7, 0xbe, 0xc3, 0xd7, 0xa1, 0xce, 0x6a, 0xfb, 0x3b, 0xae, 0xc0, 0xc0, 0x73, 0xfd, 0x7f,
-	0x80, 0x4f, 0x23, 0xff, 0xf5, 0xd5, 0x27, 0x08, 0x94, 0xf0, 0xf6, 0x52, 0xfc, 0x4b, 0x43, 0x49,
-	0x56, 0x7e, 0x33, 0x5e, 0x55, 0x94, 0xf7, 0x5f, 0x2e, 0x82, 0xb2, 0xa2, 0x6b, 0x80, 0xb7, 0xc9,
-	0x20, 0x56, 0x56, 0xc4, 0xdc, 0xb6, 0xef, 0xc3, 0xfd, 0x7f, 0x61, 0x91, 0x7a, 0x0e, 0x29, 0xfa,
-	0xd2, 0xa2, 0xb4, 0x5c, 0x9b, 0x41, 0xf8, 0xd1, 0x7f, 0x75, 0x42, 0xf1, 0x7f, 0x75, 0x3a, 0x06,
-	0x55, 0xff, 0x2d, 0x62, 0xd1, 0x6c, 0xd9, 0x05, 0x4e, 0xb7, 0x13, 0x05, 0x4e, 0x93, 0x87, 0x22,
-	0xc9, 0x35, 0x4b, 0x65, 0x4e, 0xeb, 0xb0, 0x48, 0xd3, 0x07, 0x3b, 0x44, 0x17, 0x62, 0xf5, 0xa7,
-	0x28, 0x59, 0x7f, 0xfa, 0x3a, 0x9c, 0x08, 0xc6, 0x94, 0x97, 0xda, 0xda, 0x76, 0x58, 0xcc, 0x20,
-	0x5a, 0xeb, 0x7f, 0xbe, 0x27, 0x28, 0x67, 0xde, 0xf2, 0x9c, 0x01, 0x7e, 0x0b, 0x41, 0x8d, 0xbc,
-	0x6e, 0xb8, 0x1e, 0xbe, 0x90, 0xe5, 0x26, 0x3f, 0x5e, 0x13, 0xdc, 0xba, 0x98, 0x73, 0xb4, 0x60,
-	0xf7, 0x9b, 0x08, 0x66, 0x3b, 0x2c, 0xd6, 0xc1, 0x17, 0x0b, 0x15, 0x84, 0xb6, 0x9e, 0xcc, 0x3b,
-	0x5c, 0xe2, 0xa4, 0xcb, 0x72, 0xa1, 0x0c, 0x9c, 0xa4, 0x55, 0x55, 0x66, 0xe0, 0x24, 0xbd, 0x90,
-	0xf2, 0x0d, 0x04, 0xb3, 0x3d, 0x86, 0xdc, 0xe2, 0xf3, 0x39, 0xaa, 0x2c, 0x7c, 0x36, 0x9e, 0xc8,
-	0x35, 0x56, 0xf0, 0xf0, 0x0e, 0x82, 0xb9, 0x5e, 0x58, 0x7d, 0x88, 0xf3, 0x10, 0xf3, 0xed, 0xa2,
-	0x75, 0x21, 0xdf, 0x60, 0xc1, 0xca, 0x87, 0x08, 0x4e, 0x8e, 0x18, 0x84, 0x15, 0xe2, 0x60, 0x78,
-	0xb3, 0x78, 0x4d, 0x60, 0x6b, 0xab, 0x10, 0x0d, 0xc1, 0xdd, 0x77, 0x10, 0xd4, 0xf5, 0x6e, 0x97,
-	0x5d, 0x83, 0x5c, 0xca, 0x51, 0x77, 0x21, 0x17, 0x2a, 0xb5, 0x9e, 0xca, 0x4f, 0x40, 0x62, 0xa7,
-	0x47, 0xbc, 0x8c, 0xec, 0xa4, 0x97, 0x14, 0x66, 0x60, 0xe7, 0xb0, 0xd2, 0xc2, 0xef, 0x23, 0x00,
-	0x2e, 0x3b, 0xc6, 0xd1, 0x46, 0xbe, 0x1d, 0x97, 0x8a, 0xfe, 0x5a, 0x9b, 0x45, 0x48, 0x08, 0xae,
-	0x7e, 0x88, 0x00, 0xb8, 0xa9, 0x33, 0xae, 0x36, 0x73, 0xda, 0xab, 0xbc, 0x55, 0x5b, 0x85, 0x68,
-	0x08, 0xbe, 0xbe, 0xcd, 0x75, 0x89, 0x06, 0x2b, 0xf8, 0xc9, 0x62, 0x35, 0x3c, 0xad, 0x4b, 0xb9,
-	0xc7, 0x4b, 0xcc, 0xf4, 0x88, 0x97, 0x91, 0x99, 0xd4, 0x12, 0xb6, 0xd6, 0xa5, 0x82, 0xc5, 0x62,
-	0xf8, 0x7b, 0x08, 0x9a, 0x5c, 0x8f, 0x76, 0xf5, 0x1e, 0x7e, 0x2a, 0x9f, 0x0e, 0x84, 0x85, 0x61,
-	0xad, 0x8d, 0x02, 0x14, 0x24, 0xd5, 0xe6, 0x4a, 0xc4, 0xb6, 0x68, 0x23, 0x9f, 0x02, 0xc8, 0xbb,
-	0xb4, 0x59, 0x84, 0x84, 0xe0, 0xea, 0x1b, 0x08, 0x16, 0x7a, 0x3e, 0xee, 0xca, 0x82, 0xb4, 0xff,
-	0xcf, 0xb4, 0xf7, 0x32, 0x3c, 0xd7, 0x3a, 0x9f, 0x67, 0xa8, 0x60, 0xe4, 0x7d, 0x04, 0x27, 0x7b,
-	0x12, 0xba, 0xca, 0x78, 0xc9, 0x74, 0x10, 0xc4, 0x11, 0xe9, 0x6c, 0xa1, 0x46, 0x12, 0xd6, 0x7d,
-	0x17, 0xc1, 0x7c, 0x57, 0x02, 0x3b, 0x33, 0x70, 0x93, 0x02, 0xba, 0xb6, 0x2e, 0xe6, 0x1c, 0x2d,
-	0x71, 0x33, 0x94, 0xf0, 0xc8, 0x0c, 0xdc, 0xa4, 0x20, 0xa9, 0x19, 0xb8, 0x49, 0x05, 0x41, 0xdf,
-	0x43, 0xb0, 0x20, 0x73, 0xe3, 0xe2, 0x7c, 0x04, 0xdd, 0xec, 0x31, 0x50, 0xfa, 0x97, 0x36, 0x7e,
-	0x86, 0xe0, 0xbf, 0xf5, 0x28, 0x98, 0xf9, 0xb4, 0xe5, 0xc8, 0xa9, 0xab, 0x9b, 0xed, 0xb8, 0x4d,
-	0x01, 0xb8, 0xb2, 0x1d, 0xb7, 0xa9, 0x50, 0xcf, 0xcf, 0x11, 0xa8, 0x9d, 0x04, 0x54, 0x97, 0xe0,
-	0x74, 0x33, 0x63, 0x6c, 0x9a, 0xc6, 0xec, 0x56, 0x21, 0x1a, 0x82, 0xdf, 0x1f, 0x21, 0x58, 0xed,
-	0x31, 0xe4, 0x8a, 0x21, 0x09, 0xf2, 0x6f, 0xb2, 0x85, 0x0b, 0xc5, 0x38, 0x3c, 0x02, 0x3c, 0x13,
-	0x1c, 0x26, 0xf0, 0xdd, 0xcf, 0x9f, 0xc3, 0xc3, 0x10, 0xca, 0x77, 0x11, 0x2c, 0x76, 0x65, 0x07,
-	0x9c, 0x25, 0x3a, 0x4e, 0x66, 0xe4, 0xad, 0x0b, 0xf9, 0x06, 0x73, 0x6e, 0xd6, 0x3f, 0x9b, 0x83,
-	0x53, 0x31, 0x74, 0x8c, 0xe5, 0x77, 0xef, 0x23, 0x9a, 0x57, 0xf2, 0xaa, 0xaa, 0x0c, 0x07, 0xe6,
-	0x21, 0x75, 0x6e, 0x19, 0x0e, 0xcc, 0x43, 0x4b, 0xd6, 0x68, 0xd4, 0x35, 0x0a, 0x2a, 0xbd, 0xb2,
-	0x44, 0xf0, 0x87, 0x55, 0x9e, 0x65, 0x89, 0xe0, 0x0f, 0x2f, 0x31, 0x7b, 0x13, 0x41, 0xb3, 0xef,
-	0x97, 0x70, 0x65, 0x38, 0x2e, 0xe3, 0x85, 0x64, 0x19, 0x8e, 0xcb, 0x64, 0xc5, 0xd8, 0xdb, 0x08,
-	0xaa, 0xfb, 0x86, 0xd9, 0xcd, 0xe0, 0x77, 0xd3, 0x2a, 0xc2, 0x32, 0xf8, 0xdd, 0xf4, 0xda, 0x2c,
-	0x7a, 0x2c, 0xf5, 0xa4, 0x42, 0x97, 0x6c, 0x47, 0x76, 0x82, 0x9d, 0x8b, 0x39, 0x47, 0x0b, 0x6e,
-	0x3e, 0x40, 0xb0, 0xd8, 0x8b, 0xd4, 0x30, 0x65, 0x0b, 0x45, 0x93, 0x65, 0x5b, 0xd9, 0x42, 0xd1,
-	0xb4, 0xe2, 0xa9, 0x0f, 0x11, 0xcc, 0xf3, 0x50, 0x94, 0x57, 0xb2, 0xe0, 0xed, 0x9c, 0x15, 0x20,
-	0x91, 0xea, 0x9b, 0xd6, 0xe5, 0x82, 0x54, 0x04, 0x77, 0x1f, 0x21, 0x50, 0x46, 0x89, 0x7a, 0x0f,
-	0x91, 0x34, 0x6f, 0x4d, 0xa1, 0x56, 0xa5, 0xb5, 0x5d, 0x8c, 0x48, 0x88, 0x2f, 0xd4, 0xee, 0xea,
-	0x5e, 0xa7, 0x9f, 0x41, 0xe1, 0xd3, 0x2a, 0x4b, 0x32, 0x28, 0x7c, 0x6a, 0x65, 0xc9, 0x43, 0x88,
-	0xa9, 0x7c, 0x5f, 0xfa, 0x7a, 0x15, 0xce, 0xf7, 0xb1, 0xad, 0xec, 0x2a, 0x9f, 0xf6, 0xc9, 0xac,
-	0xf5, 0x3f, 0xcd, 0xc0, 0xd2, 0x15, 0xeb, 0x80, 0x38, 0xa6, 0x8c, 0xd6, 0x7d, 0xc0, 0xa3, 0xe9,
-	0xe8, 0x8d, 0x4d, 0x11, 0x70, 0x68, 0x23, 0xc7, 0xd8, 0x18, 0x00, 0xfe, 0x03, 0x04, 0x27, 0x7a,
-	0xd1, 0x2f, 0x13, 0xe5, 0x82, 0x1c, 0xe4, 0xcf, 0x2b, 0xe5, 0x82, 0x1c, 0xa2, 0x1f, 0x45, 0x7a,
-	0x8b, 0xb3, 0xb5, 0x61, 0xdb, 0x03, 0xa3, 0xa3, 0xf3, 0x4f, 0x33, 0x3d, 0x9e, 0x29, 0x73, 0x08,
-	0x11, 0xdd, 0xd6, 0xb9, 0xec, 0x03, 0x39, 0x1b, 0x9b, 0x0f, 0xc1, 0xa4, 0xdf, 0xd1, 0x7b, 0xa9,
-	0xc6, 0xbe, 0xbb, 0xb7, 0x37, 0xcb, 0xfe, 0x3c, 0xf2, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x42,
-	0x8a, 0xd2, 0x2c, 0x90, 0x4f, 0x00, 0x00,
+	0xc2, 0x63, 0xa4, 0x44, 0x8a, 0x84, 0x22, 0x94, 0x28, 0x4a, 0x94, 0x37, 0x78, 0x4b, 0x94, 0xa7,
+	0xe4, 0x3d, 0x52, 0xde, 0xf2, 0x07, 0x24, 0xaa, 0x8f, 0xee, 0xae, 0xfe, 0xd8, 0xdd, 0xe9, 0xee,
+	0x69, 0x50, 0x9e, 0xb6, 0xab, 0x7a, 0xea, 0xd4, 0x39, 0x75, 0x3e, 0xea, 0xd4, 0xaf, 0xce, 0x36,
+	0x2c, 0xba, 0xc4, 0x39, 0x30, 0x3a, 0xc4, 0x5d, 0xb3, 0x1d, 0xcb, 0xb3, 0xf0, 0xff, 0x74, 0xac,
+	0xe1, 0x5a, 0x7f, 0xa4, 0xdf, 0x25, 0xc6, 0x9a, 0xad, 0xeb, 0xee, 0x5a, 0xc7, 0x25, 0x6b, 0xe2,
+	0x37, 0x0e, 0xe9, 0x19, 0xae, 0xe7, 0x8c, 0xd7, 0x74, 0xdb, 0x50, 0xbf, 0x0e, 0xcb, 0xd7, 0xad,
+	0xae, 0xb1, 0x3f, 0x6e, 0x77, 0xfa, 0x64, 0xa8, 0xbb, 0x1a, 0x79, 0x6d, 0x44, 0x5c, 0x0f, 0xdf,
+	0x0b, 0x4d, 0xf1, 0xf3, 0x9d, 0xae, 0x82, 0xce, 0xa2, 0x07, 0x9a, 0x5a, 0xd8, 0x81, 0x77, 0xa0,
+	0xee, 0xf2, 0xdf, 0x2b, 0x95, 0xb3, 0x33, 0x0f, 0xcc, 0xad, 0xff, 0xef, 0xda, 0x84, 0x13, 0xae,
+	0xf1, 0x79, 0x34, 0x7f, 0xbc, 0x7a, 0x0b, 0x66, 0x79, 0x17, 0x6e, 0x41, 0x83, 0x77, 0x06, 0x33,
+	0x06, 0x6d, 0xac, 0x40, 0xdd, 0x1d, 0x0d, 0x87, 0xba, 0x33, 0x56, 0x2a, 0xec, 0x95, 0xdf, 0xc4,
+	0xa7, 0x61, 0x96, 0xff, 0x4a, 0x99, 0x61, 0x2f, 0x44, 0x4b, 0xdd, 0x87, 0x95, 0x98, 0x60, 0xae,
+	0x6d, 0x99, 0x2e, 0xc1, 0xd7, 0xa1, 0xe1, 0x88, 0x67, 0x36, 0xcd, 0xdc, 0xfa, 0xc3, 0x13, 0x33,
+	0xef, 0x13, 0xd1, 0x02, 0x12, 0xea, 0x6b, 0x70, 0xea, 0x2a, 0xd1, 0x1d, 0x6f, 0x8f, 0xe8, 0x5e,
+	0x9b, 0x78, 0xfe, 0xfa, 0xbd, 0x04, 0x4d, 0xc3, 0x74, 0x3d, 0xdd, 0xec, 0x10, 0x57, 0x41, 0x6c,
+	0x8d, 0x2e, 0x4c, 0x3c, 0x8d, 0x4c, 0xf0, 0xf2, 0x80, 0x0c, 0x89, 0xe9, 0x69, 0x21, 0x39, 0xb5,
+	0x1d, 0x9d, 0x52, 0xfc, 0xe2, 0x18, 0x95, 0xdd, 0x07, 0xe0, 0x53, 0xd8, 0xe9, 0x8a, 0x45, 0x94,
+	0x7a, 0xd4, 0x4f, 0x10, 0x2c, 0x47, 0x05, 0x29, 0x65, 0xbd, 0xf0, 0xae, 0xbc, 0x30, 0xdc, 0x78,
+	0x1e, 0x9b, 0x98, 0xde, 0x8e, 0x18, 0x79, 0x75, 0x4f, 0x73, 0x23, 0x4b, 0x32, 0x84, 0x85, 0xc8,
+	0xbb, 0x62, 0x8b, 0x41, 0xdf, 0x13, 0xc7, 0xb9, 0x4e, 0x5c, 0x57, 0xef, 0x11, 0x61, 0x58, 0x52,
+	0x8f, 0xba, 0x05, 0xcd, 0xb6, 0xd7, 0xe6, 0xe4, 0xf0, 0x32, 0xd4, 0x3a, 0xd6, 0xc8, 0xf4, 0xd8,
+	0x34, 0x33, 0x1a, 0x6f, 0xe0, 0xb3, 0x30, 0x67, 0x99, 0x03, 0xc3, 0x24, 0x5b, 0xec, 0x5d, 0x85,
+	0xbd, 0x93, 0xbb, 0xd4, 0xab, 0x00, 0x6d, 0xcf, 0xe7, 0xfa, 0x10, 0x2a, 0xf7, 0xc3, 0x02, 0x7b,
+	0xd8, 0x1c, 0x6f, 0x5b, 0x43, 0xdd, 0x30, 0x05, 0x9d, 0x68, 0xa7, 0xfa, 0x5f, 0x50, 0x6b, 0x7b,
+	0x1b, 0xb6, 0x9d, 0x4e, 0x44, 0xfd, 0x27, 0xa2, 0x33, 0xe9, 0x9e, 0xe1, 0x7a, 0x46, 0xc7, 0xc5,
+	0xcf, 0x41, 0xc3, 0x8f, 0x16, 0x42, 0xa1, 0xeb, 0x93, 0x7b, 0xaf, 0x2f, 0xb5, 0x16, 0xd0, 0xc0,
+	0xcf, 0x47, 0x35, 0x4a, 0x09, 0x3e, 0x92, 0x81, 0xa0, 0xbf, 0x02, 0x92, 0x3a, 0xf1, 0x26, 0x54,
+	0x75, 0xdb, 0x76, 0xd9, 0xca, 0xcf, 0xad, 0xaf, 0x65, 0xa0, 0xb6, 0x61, 0xdb, 0x1a, 0x1b, 0xab,
+	0xbe, 0x83, 0xe0, 0xf4, 0x15, 0xe2, 0xf3, 0xeb, 0xee, 0x98, 0xfb, 0x96, 0xef, 0x9c, 0x0a, 0xd4,
+	0x2d, 0xdb, 0x33, 0x2c, 0x93, 0xbb, 0x66, 0x53, 0xf3, 0x9b, 0x74, 0x01, 0x75, 0xdb, 0x0e, 0x6c,
+	0x82, 0x37, 0xa8, 0x2e, 0xc5, 0x6c, 0xcf, 0xe9, 0x43, 0xdf, 0x1e, 0xe4, 0x2e, 0x6a, 0x6e, 0x6c,
+	0xad, 0x6f, 0x98, 0x83, 0xb1, 0x52, 0x3d, 0x8b, 0x1e, 0x68, 0x68, 0x61, 0x87, 0xfa, 0xd3, 0x0a,
+	0xac, 0x26, 0x58, 0x29, 0xc7, 0xbd, 0xba, 0xb0, 0xa4, 0x0f, 0x06, 0xfe, 0x4c, 0xdb, 0xc4, 0xd3,
+	0x8d, 0x41, 0x66, 0x37, 0x13, 0xc3, 0xf9, 0x68, 0x2d, 0x49, 0x10, 0xb7, 0x01, 0xdc, 0xc0, 0xa0,
+	0x84, 0x96, 0xb2, 0xe8, 0xdc, 0x1f, 0xaa, 0x49, 0x64, 0xd4, 0xcf, 0x10, 0x9c, 0xb8, 0x6e, 0x74,
+	0x1c, 0x4b, 0x4c, 0xf6, 0x0c, 0x61, 0xd1, 0xdd, 0x23, 0xa6, 0x2e, 0x2c, 0xba, 0xa9, 0x89, 0x16,
+	0xd5, 0xa0, 0xed, 0x58, 0xaf, 0x92, 0x8e, 0xe7, 0xef, 0x07, 0xa2, 0x19, 0x6a, 0x70, 0xe6, 0x08,
+	0x0d, 0x56, 0x93, 0x1a, 0x54, 0xa0, 0x7e, 0x40, 0x1c, 0xd7, 0xb0, 0x4c, 0xa5, 0xc6, 0x29, 0x8a,
+	0x26, 0x1d, 0x4b, 0xcc, 0x03, 0xc3, 0xb1, 0x4c, 0x1a, 0x66, 0x95, 0x59, 0x3e, 0x56, 0xea, 0x62,
+	0x73, 0x0e, 0x0c, 0xdd, 0x55, 0xea, 0x62, 0x4e, 0xda, 0x50, 0x3f, 0xad, 0xc3, 0xbc, 0x2c, 0xcf,
+	0x31, 0x31, 0x29, 0xaf, 0xe9, 0x49, 0x8c, 0x57, 0x13, 0x8c, 0x77, 0x89, 0xdb, 0x71, 0x0c, 0x66,
+	0xdc, 0x42, 0x2c, 0xb9, 0x8b, 0xce, 0x39, 0x20, 0x07, 0x64, 0x20, 0x84, 0xe2, 0x0d, 0xb6, 0xd9,
+	0x8a, 0xdd, 0xbd, 0xce, 0xdd, 0x43, 0x34, 0xf1, 0x35, 0xa8, 0xd9, 0xba, 0xd7, 0x77, 0x15, 0x60,
+	0x16, 0xf5, 0x7f, 0x59, 0x2d, 0xea, 0xa6, 0xee, 0xf5, 0x35, 0x4e, 0x82, 0x6d, 0xdc, 0x9e, 0xee,
+	0x8d, 0x5c, 0xa5, 0x21, 0x36, 0x6e, 0xd6, 0xc2, 0x04, 0xc0, 0x76, 0x2c, 0x9b, 0x38, 0x9e, 0x41,
+	0x5c, 0xa5, 0xc9, 0x26, 0xba, 0x3c, 0xf1, 0x44, 0xf2, 0x82, 0xaf, 0xdd, 0x0c, 0xe8, 0x5c, 0x36,
+	0x3d, 0x67, 0xac, 0x49, 0x84, 0xa9, 0x32, 0x3c, 0x63, 0x48, 0x5c, 0x4f, 0x1f, 0xda, 0xca, 0x1c,
+	0x57, 0x46, 0xd0, 0x81, 0x6f, 0x41, 0xd3, 0x76, 0xac, 0x03, 0xa3, 0x4b, 0x1c, 0x57, 0x99, 0x67,
+	0x3c, 0x9c, 0xcb, 0xc5, 0xc3, 0x33, 0x64, 0xac, 0x85, 0xa4, 0x42, 0x4b, 0x59, 0x90, 0x2c, 0x85,
+	0x8a, 0xfc, 0xec, 0x66, 0xdb, 0x73, 0x74, 0x8f, 0xf4, 0xc6, 0xca, 0x62, 0x11, 0x91, 0x43, 0x3a,
+	0x42, 0xe4, 0xb0, 0x03, 0xab, 0x30, 0x3f, 0xb4, 0xba, 0xbb, 0x81, 0xd4, 0x27, 0x18, 0x0f, 0x91,
+	0xbe, 0xb8, 0xb1, 0x9f, 0x4c, 0x1a, 0xfb, 0x7d, 0x00, 0x7c, 0x7a, 0xe2, 0x6c, 0x8e, 0x95, 0x25,
+	0xbe, 0x37, 0x86, 0x3d, 0xf8, 0x4b, 0xd0, 0xdc, 0x77, 0xf4, 0x21, 0xb9, 0x6b, 0x39, 0x77, 0x14,
+	0xcc, 0x42, 0xc3, 0xf9, 0x89, 0x65, 0x79, 0x9a, 0x8e, 0xbc, 0x6d, 0x39, 0x77, 0x84, 0xea, 0xc6,
+	0x5a, 0x48, 0xac, 0x75, 0x11, 0x4e, 0xc4, 0x34, 0x8a, 0x4f, 0xc2, 0xcc, 0x1d, 0x32, 0x16, 0xce,
+	0x44, 0x1f, 0xe9, 0x0a, 0x1f, 0xe8, 0x83, 0x11, 0xf1, 0xdd, 0x88, 0x35, 0xce, 0x57, 0xce, 0x21,
+	0x3a, 0x3c, 0xb6, 0x3a, 0x59, 0x86, 0xab, 0x1b, 0xb0, 0x94, 0xe0, 0x0e, 0x63, 0xa8, 0x9a, 0xd4,
+	0x2f, 0x39, 0x05, 0xf6, 0x2c, 0x3b, 0x64, 0x25, 0xe2, 0x90, 0xea, 0x5f, 0x11, 0xcc, 0xf9, 0xfb,
+	0xe7, 0x68, 0x40, 0xa8, 0x0b, 0x38, 0xa3, 0x41, 0x18, 0x0d, 0x44, 0x8b, 0x66, 0xc2, 0xf4, 0x69,
+	0x77, 0x6c, 0xfb, 0x7c, 0x04, 0x6d, 0x6a, 0xb7, 0xba, 0xe7, 0x39, 0xc6, 0xde, 0xc8, 0xf3, 0xc3,
+	0x41, 0xd8, 0xc1, 0xe2, 0xa2, 0xee, 0x79, 0xc4, 0x09, 0x82, 0x81, 0x68, 0x4e, 0x10, 0x0c, 0x22,
+	0x1e, 0x31, 0x1b, 0xf7, 0x88, 0xb8, 0xf1, 0xd4, 0x93, 0xc6, 0xa3, 0xbe, 0x87, 0xe0, 0xf4, 0x46,
+	0xb7, 0x7b, 0xc3, 0x79, 0xc1, 0xee, 0xea, 0x1e, 0x91, 0x45, 0x95, 0x45, 0x42, 0x47, 0x89, 0x54,
+	0x39, 0x42, 0xa4, 0x99, 0x23, 0x45, 0xaa, 0x26, 0x44, 0x52, 0x7f, 0x1b, 0x2e, 0x38, 0x0d, 0x3d,
+	0x54, 0x5d, 0x34, 0xf8, 0xf8, 0xea, 0xa2, 0xcf, 0xf8, 0xab, 0xd0, 0x10, 0x61, 0x61, 0x2c, 0x36,
+	0xca, 0xcd, 0x3c, 0x61, 0xcd, 0x0f, 0x36, 0xc2, 0xef, 0x02, 0x9a, 0xad, 0x27, 0x60, 0x21, 0xf2,
+	0x2a, 0x93, 0xd1, 0x9d, 0x83, 0x46, 0x90, 0x29, 0x60, 0xa8, 0x76, 0xac, 0x2e, 0x5f, 0xbe, 0x9a,
+	0xc6, 0x9e, 0xe9, 0xe2, 0x0c, 0x45, 0x96, 0x2a, 0x6c, 0x4d, 0x34, 0xd5, 0xbf, 0x20, 0x38, 0x75,
+	0x85, 0x78, 0x97, 0x5f, 0xa7, 0x7e, 0x49, 0xd3, 0x2b, 0x91, 0xfb, 0x60, 0xa8, 0x7a, 0xa1, 0x12,
+	0xd8, 0x73, 0x09, 0x5b, 0x4f, 0x64, 0xab, 0xab, 0xc5, 0xb7, 0x3a, 0xf9, 0xa4, 0x37, 0x1b, 0x3b,
+	0xe9, 0xc5, 0x02, 0x50, 0x3d, 0x11, 0x80, 0xd4, 0x5f, 0x23, 0x58, 0x8e, 0x4a, 0x56, 0x4e, 0x2a,
+	0x15, 0x91, 0xa1, 0x72, 0x94, 0x0c, 0x33, 0x87, 0x9f, 0x56, 0xab, 0x91, 0xd3, 0xaa, 0xfa, 0xcb,
+	0x19, 0x58, 0xde, 0x72, 0x88, 0xe4, 0x1c, 0x42, 0x2d, 0x37, 0xa0, 0x2e, 0x68, 0x0b, 0xd6, 0x1f,
+	0xcd, 0x15, 0xff, 0x35, 0x9f, 0x0a, 0x7e, 0x01, 0x6a, 0xd4, 0xc1, 0xfc, 0x33, 0xd6, 0xa5, 0x89,
+	0xc9, 0xa5, 0x3b, 0xb0, 0xc6, 0xa9, 0xe1, 0x97, 0xa1, 0xea, 0xe9, 0x3d, 0x9a, 0xf3, 0x51, 0xaa,
+	0x57, 0x26, 0xa6, 0x9a, 0x26, 0xf4, 0xda, 0xae, 0xde, 0x13, 0x3b, 0x33, 0x23, 0x8a, 0x5f, 0x96,
+	0x4f, 0x12, 0x55, 0x36, 0xc3, 0xc5, 0x5c, 0xcb, 0x90, 0x72, 0xa6, 0x68, 0x3d, 0x0e, 0xcd, 0x60,
+	0xbe, 0x4c, 0x3e, 0xf8, 0x16, 0x82, 0x95, 0x18, 0xfb, 0x5f, 0x80, 0xc1, 0xa9, 0xd7, 0x60, 0x79,
+	0x9b, 0x0c, 0x48, 0xc2, 0x72, 0x8e, 0xcd, 0x2a, 0xf7, 0x2d, 0xa7, 0xc3, 0xc5, 0x6a, 0x68, 0xbc,
+	0xa1, 0xee, 0xc3, 0x4a, 0x8c, 0x56, 0x39, 0xe0, 0xc8, 0xc3, 0xb0, 0x14, 0x9e, 0x7b, 0x26, 0x62,
+	0x58, 0xfd, 0x15, 0x02, 0x2c, 0x8f, 0x29, 0x67, 0xa9, 0x25, 0x77, 0xab, 0x4c, 0xc3, 0xdd, 0xd4,
+	0x65, 0x99, 0x6b, 0x1f, 0x45, 0x53, 0x3f, 0xe6, 0x41, 0x38, 0xec, 0x2e, 0x47, 0x9a, 0xe7, 0xa5,
+	0x13, 0x3d, 0x77, 0xf7, 0x9c, 0xe2, 0x04, 0x64, 0xd4, 0x7f, 0x20, 0x38, 0x13, 0x09, 0x02, 0x74,
+	0x0f, 0x9b, 0x10, 0x1d, 0x74, 0x22, 0x19, 0x3c, 0x67, 0x48, 0x9b, 0x98, 0xa1, 0x43, 0x67, 0x3d,
+	0x2a, 0x9d, 0x2f, 0x98, 0x1b, 0xaa, 0x77, 0xa0, 0x95, 0x36, 0x6f, 0x39, 0x5e, 0xf1, 0x98, 0x0c,
+	0x4c, 0xd0, 0xe0, 0xea, 0x4e, 0xec, 0x1a, 0xab, 0x89, 0x81, 0xe5, 0x58, 0xd4, 0xb5, 0xe8, 0xee,
+	0x91, 0xf9, 0xa0, 0x27, 0x6d, 0x19, 0xea, 0x47, 0x08, 0x94, 0xe4, 0x7e, 0x32, 0x91, 0x25, 0x85,
+	0x09, 0x72, 0x25, 0x92, 0x20, 0xb7, 0xa1, 0x4a, 0x9f, 0x04, 0xf2, 0x50, 0x78, 0x6f, 0x63, 0xc4,
+	0xd4, 0x57, 0x63, 0x16, 0xcf, 0xd9, 0x2c, 0xc7, 0x04, 0xbe, 0xcb, 0x33, 0xe5, 0xcc, 0x36, 0x50,
+	0xd2, 0xb6, 0xae, 0xbe, 0x89, 0x60, 0x35, 0xc1, 0x4f, 0x39, 0xa6, 0xa5, 0x40, 0x5d, 0x63, 0x5a,
+	0xe4, 0x32, 0x34, 0x35, 0xbf, 0xa9, 0xb6, 0xe1, 0x4c, 0x74, 0x57, 0x9a, 0x7c, 0x59, 0x14, 0xa8,
+	0x3b, 0x51, 0xa2, 0xa2, 0x49, 0x3d, 0x3b, 0x8d, 0x68, 0x39, 0x6a, 0x7d, 0x14, 0x56, 0x42, 0x07,
+	0xa5, 0xd9, 0xc6, 0x64, 0x8e, 0xfd, 0xaf, 0x08, 0x54, 0xc9, 0xc7, 0x95, 0xb3, 0xf8, 0x5f, 0x11,
+	0xe9, 0x1b, 0xb7, 0x9e, 0x9d, 0x89, 0x49, 0xa5, 0x73, 0x17, 0x4f, 0xe0, 0xf2, 0xe7, 0x58, 0xaf,
+	0xc0, 0x6a, 0xc4, 0x36, 0x77, 0xf5, 0xde, 0x64, 0x8a, 0x17, 0x93, 0x54, 0x52, 0x26, 0x99, 0x91,
+	0x26, 0x51, 0x8d, 0x58, 0x0c, 0x62, 0x13, 0x94, 0x63, 0x04, 0x9f, 0x22, 0x58, 0x09, 0x7d, 0x69,
+	0x62, 0x2b, 0xc0, 0x5f, 0x8e, 0xe8, 0xe6, 0x6a, 0x16, 0xcf, 0x4e, 0xce, 0x35, 0x3d, 0xd5, 0xf4,
+	0xe4, 0x48, 0x55, 0xa2, 0x6d, 0xaa, 0xcf, 0x82, 0x12, 0xf1, 0xd4, 0xc9, 0x57, 0x0e, 0x43, 0xf5,
+	0x0e, 0x19, 0xfb, 0xae, 0xcf, 0x9e, 0x69, 0x34, 0x4f, 0xa1, 0x56, 0x0e, 0xe7, 0x63, 0x98, 0xbb,
+	0x4a, 0xf4, 0x81, 0xd7, 0xdf, 0xea, 0x93, 0xce, 0x1d, 0xca, 0xce, 0xd0, 0x3f, 0xa8, 0x37, 0x35,
+	0xf6, 0xcc, 0x90, 0x07, 0xcb, 0xe1, 0x68, 0x75, 0x4d, 0x63, 0xcf, 0xf4, 0x08, 0x69, 0x98, 0x1e,
+	0x71, 0x0e, 0xf4, 0x01, 0x33, 0xd6, 0x9a, 0x16, 0xb4, 0xa9, 0x3e, 0x18, 0xf6, 0xc2, 0x0e, 0x90,
+	0x35, 0x8d, 0x37, 0xa8, 0xde, 0x46, 0xce, 0x40, 0x1c, 0xa8, 0xe9, 0xa3, 0xfa, 0xf7, 0x2a, 0x2c,
+	0xa7, 0x9d, 0x7c, 0x62, 0x57, 0x5c, 0x28, 0x71, 0xc5, 0x75, 0xf4, 0xe9, 0xf6, 0x5e, 0x68, 0x12,
+	0xb3, 0x6b, 0x5b, 0x86, 0xe9, 0xf1, 0xb3, 0x5e, 0x53, 0x0b, 0x3b, 0x28, 0xe3, 0x7d, 0xcb, 0xf5,
+	0x24, 0x28, 0x3d, 0x68, 0x4b, 0xb0, 0x6e, 0x2d, 0x02, 0xeb, 0x0e, 0x23, 0x49, 0xe1, 0x2c, 0xb3,
+	0xf1, 0xeb, 0x85, 0x0e, 0x77, 0x47, 0xc2, 0xbb, 0xb7, 0x60, 0xae, 0x1f, 0xaa, 0x84, 0xc1, 0x08,
+	0x59, 0xd2, 0x18, 0x49, 0x9d, 0x9a, 0x4c, 0x28, 0x0a, 0x92, 0x35, 0xe2, 0x20, 0xd9, 0x2b, 0xb0,
+	0xd8, 0xd5, 0x3d, 0x7d, 0x8b, 0x50, 0x35, 0xee, 0x98, 0xfb, 0x96, 0xd2, 0x64, 0x13, 0x3f, 0x3e,
+	0xf1, 0xc4, 0xdb, 0x91, 0xe1, 0x5a, 0x8c, 0x5c, 0x02, 0x85, 0x83, 0x14, 0x08, 0x57, 0x42, 0x65,
+	0xe6, 0x22, 0xa8, 0x4c, 0xd1, 0x24, 0x79, 0x0f, 0x16, 0xa3, 0xec, 0xa5, 0xc2, 0x9f, 0x34, 0x67,
+	0x23, 0xbd, 0x10, 0xfd, 0x14, 0x2d, 0x7c, 0x3f, 0x2c, 0xe8, 0x07, 0xba, 0x31, 0xd0, 0xf7, 0x06,
+	0xe4, 0x25, 0xcb, 0xf4, 0xe3, 0x73, 0xb4, 0x53, 0xbd, 0x0d, 0xab, 0x69, 0xba, 0x7e, 0x86, 0x8c,
+	0x8b, 0x59, 0xb4, 0xea, 0xc1, 0xaa, 0x26, 0x40, 0xea, 0x00, 0x1d, 0x10, 0xc1, 0xe5, 0x45, 0xea,
+	0x87, 0xbc, 0x4b, 0x44, 0x83, 0x82, 0xa8, 0x43, 0x40, 0x4e, 0xfd, 0x16, 0x02, 0x25, 0x39, 0x6d,
+	0x39, 0x7b, 0xfb, 0x71, 0x37, 0xfc, 0x2f, 0xc2, 0x99, 0x17, 0x4c, 0xe7, 0x90, 0x35, 0x28, 0x56,
+	0x3c, 0x40, 0x8f, 0x4f, 0x29, 0xa4, 0xcb, 0x89, 0xb6, 0x37, 0xe1, 0x64, 0x50, 0xa8, 0x30, 0x1d,
+	0xf6, 0xf7, 0x60, 0x49, 0xa2, 0x58, 0x0e, 0xd7, 0x7f, 0x42, 0xb0, 0xfc, 0xb4, 0x61, 0x76, 0xfd,
+	0xd5, 0x09, 0xb6, 0xb6, 0x07, 0x61, 0xa9, 0x63, 0x99, 0xee, 0x68, 0x48, 0x9c, 0x76, 0x4c, 0x84,
+	0xe4, 0x8b, 0xdc, 0x50, 0xed, 0x59, 0x98, 0x13, 0x51, 0x80, 0x26, 0xc0, 0x3e, 0x56, 0x2e, 0x75,
+	0x31, 0x60, 0x98, 0xa6, 0x1f, 0x35, 0xbe, 0x89, 0x32, 0x40, 0xee, 0xd8, 0xab, 0x4f, 0xf5, 0x0f,
+	0x08, 0x56, 0x62, 0x62, 0x95, 0x63, 0xdd, 0x2f, 0x27, 0xeb, 0x46, 0xa6, 0x86, 0x0d, 0xaa, 0x1f,
+	0x23, 0x96, 0xb8, 0xdf, 0x30, 0x49, 0xdc, 0x2f, 0xb2, 0x69, 0xe7, 0x41, 0x58, 0xf2, 0xef, 0xfa,
+	0xda, 0xb1, 0x50, 0x94, 0x7c, 0x81, 0xd7, 0x00, 0xfb, 0x9d, 0x3b, 0xa1, 0x79, 0x72, 0xe5, 0xa5,
+	0xbc, 0x09, 0x34, 0x54, 0x0d, 0x35, 0xa4, 0xfe, 0x9e, 0x1f, 0x1d, 0x22, 0x9c, 0x97, 0xa3, 0x00,
+	0x39, 0x4a, 0x56, 0xa6, 0x1b, 0x25, 0xdf, 0xe6, 0x30, 0x59, 0x41, 0xd7, 0xc8, 0xb6, 0xf8, 0x58,
+	0x02, 0xb2, 0xa5, 0xc5, 0x5c, 0x8e, 0xf2, 0xf1, 0x1f, 0x68, 0xcb, 0x2e, 0xdc, 0xc3, 0x4f, 0x3a,
+	0xfe, 0xcb, 0x36, 0x4b, 0xc0, 0xa6, 0x12, 0x29, 0xa5, 0xec, 0x6e, 0x46, 0xce, 0xee, 0xd4, 0x21,
+	0xdc, 0x9b, 0x3e, 0x69, 0x39, 0xc1, 0xf4, 0xbd, 0x8a, 0x8f, 0xd7, 0xf9, 0xf3, 0x65, 0x80, 0x27,
+	0x8f, 0x93, 0xd1, 0x8d, 0x64, 0xaa, 0xfc, 0xa2, 0xa3, 0x9d, 0x11, 0xbe, 0x4c, 0x63, 0xab, 0x4c,
+	0xfc, 0x72, 0x10, 0x57, 0x7a, 0xa9, 0x00, 0xe6, 0x05, 0x58, 0xbe, 0xad, 0x7b, 0x9d, 0x7e, 0x3c,
+	0x58, 0xde, 0x0f, 0x0b, 0x2e, 0x19, 0xec, 0xc7, 0x7d, 0x35, 0xda, 0xa9, 0x7e, 0x54, 0x81, 0x95,
+	0xd8, 0xf0, 0x72, 0xdc, 0xec, 0x34, 0xcc, 0xea, 0x1d, 0x4f, 0xca, 0x44, 0x79, 0x0b, 0x5f, 0xe3,
+	0x0b, 0xcb, 0xc1, 0xc3, 0xfc, 0x65, 0x1d, 0x4c, 0x25, 0x72, 0x54, 0xac, 0x4e, 0x37, 0x2a, 0x3e,
+	0x0b, 0x27, 0xaf, 0x10, 0x4f, 0xd4, 0xcb, 0x4e, 0x64, 0xd9, 0xf2, 0x9d, 0x64, 0x25, 0x7a, 0x27,
+	0xa9, 0xb6, 0x59, 0x88, 0xdd, 0x18, 0x0c, 0xb2, 0x10, 0xbc, 0x0f, 0xe0, 0xae, 0xe1, 0xf5, 0xf9,
+	0x10, 0x71, 0x85, 0x24, 0xf5, 0xa8, 0x3f, 0x46, 0xfc, 0x82, 0x47, 0x90, 0x2c, 0x4d, 0x8d, 0x6e,
+	0xc8, 0x40, 0x50, 0xe1, 0xcb, 0xac, 0x8d, 0x3d, 0xb5, 0xc5, 0x5d, 0xab, 0x38, 0x50, 0x44, 0x3a,
+	0xd5, 0x5f, 0xf0, 0x98, 0x2e, 0x09, 0x5e, 0x0e, 0x97, 0x53, 0x2c, 0x89, 0xbe, 0x01, 0xa7, 0x04,
+	0x74, 0x31, 0x25, 0xdd, 0x93, 0xe0, 0xea, 0xb0, 0xcc, 0x25, 0x50, 0xdf, 0x40, 0x70, 0x4a, 0xae,
+	0xb9, 0x2e, 0xcc, 0xf8, 0x61, 0xc5, 0xdd, 0x47, 0x5c, 0xb0, 0x93, 0x68, 0x3d, 0x7b, 0x79, 0x88,
+	0xcf, 0xe9, 0x8d, 0x6e, 0x77, 0x9b, 0xd8, 0xc4, 0xec, 0x12, 0xb3, 0x63, 0x84, 0x39, 0xcb, 0x2b,
+	0x30, 0xdf, 0x95, 0xba, 0x45, 0xed, 0xf7, 0x13, 0x93, 0x5f, 0x94, 0x8b, 0xbc, 0x26, 0xa0, 0x3d,
+	0xd6, 0x22, 0x04, 0xd5, 0x3e, 0x43, 0xea, 0xa3, 0x53, 0x97, 0x23, 0xe4, 0xd7, 0xe0, 0x0c, 0xbf,
+	0xf7, 0xfe, 0x42, 0xe4, 0xfc, 0x1b, 0x02, 0x9c, 0xfc, 0x11, 0xde, 0x85, 0x86, 0x9f, 0xfa, 0x09,
+	0x19, 0xf3, 0x47, 0xf0, 0x80, 0x52, 0xb4, 0xde, 0xaf, 0x32, 0xbd, 0x7a, 0xbf, 0x16, 0x34, 0xac,
+	0x03, 0xe2, 0x38, 0x46, 0x97, 0x9f, 0xca, 0x1a, 0x5a, 0xd0, 0xa6, 0x87, 0xe6, 0xb4, 0xe5, 0x2d,
+	0x47, 0x97, 0x26, 0x3b, 0x26, 0xa4, 0x29, 0xf2, 0xd8, 0x1d, 0xc0, 0xd5, 0x87, 0x44, 0xaa, 0x3e,
+	0x6f, 0x68, 0x52, 0x0f, 0xf5, 0x50, 0xd3, 0x6a, 0x93, 0xc1, 0xbe, 0x10, 0x4f, 0xb4, 0xd4, 0xdf,
+	0x21, 0x68, 0x5d, 0x21, 0xde, 0x96, 0x65, 0x7e, 0x0e, 0xd2, 0xe1, 0x76, 0x52, 0x7d, 0x39, 0x6f,
+	0xc0, 0x43, 0x3a, 0xbe, 0x08, 0x37, 0x1d, 0xeb, 0x73, 0x12, 0xc1, 0xb7, 0xc6, 0xa2, 0x22, 0x04,
+	0x74, 0xd4, 0x9f, 0xcc, 0xc2, 0x42, 0xa4, 0x98, 0x1b, 0xbf, 0x08, 0xf3, 0x43, 0xe9, 0xc7, 0xc5,
+	0x8a, 0x8d, 0x22, 0xa4, 0x4a, 0x3d, 0xd5, 0xe0, 0xe7, 0x61, 0x4e, 0xec, 0x0a, 0xe6, 0xbe, 0xe5,
+	0x67, 0xe5, 0x99, 0xb7, 0x58, 0x99, 0x46, 0x78, 0xc7, 0x5d, 0x2d, 0x7c, 0xc7, 0x1d, 0x35, 0xc0,
+	0xda, 0x74, 0x0c, 0x30, 0x6a, 0x12, 0xb3, 0xd3, 0x31, 0x09, 0xbc, 0x2b, 0xce, 0xbd, 0x75, 0x46,
+	0xef, 0xa9, 0x7c, 0xff, 0x13, 0x90, 0xa8, 0xdc, 0x5a, 0x87, 0x65, 0xd9, 0x16, 0x6e, 0x71, 0x5c,
+	0xc9, 0x55, 0x1a, 0xec, 0x74, 0x9d, 0xfa, 0x0e, 0x5f, 0x87, 0x3a, 0xab, 0xfe, 0xef, 0xb8, 0x02,
+	0x25, 0xcf, 0xf5, 0x1f, 0x04, 0x3e, 0x8d, 0xfc, 0x17, 0x5c, 0x9f, 0x20, 0x50, 0xc2, 0xfb, 0x4d,
+	0xf1, 0x4f, 0x0f, 0x25, 0x79, 0xf9, 0xcd, 0x78, 0xdd, 0x51, 0xde, 0x7f, 0xca, 0x08, 0x0a, 0x8f,
+	0xae, 0x01, 0xde, 0x26, 0x83, 0x58, 0xe1, 0x11, 0x0b, 0xdb, 0x7e, 0x0c, 0xf7, 0xff, 0xc9, 0x45,
+	0xea, 0x39, 0xa4, 0x2c, 0x4c, 0x8b, 0xd2, 0x72, 0x6d, 0x06, 0xf2, 0x47, 0xff, 0x19, 0x0a, 0xc5,
+	0xff, 0x19, 0xea, 0x18, 0xdc, 0xfd, 0x37, 0x88, 0x65, 0xb3, 0x65, 0x97, 0x40, 0xdd, 0x4e, 0x94,
+	0x40, 0x4d, 0x9e, 0x8a, 0x24, 0x65, 0x96, 0x0a, 0xa1, 0xd6, 0x61, 0x91, 0x1e, 0x1f, 0xec, 0x10,
+	0x5d, 0x88, 0x81, 0xa2, 0x28, 0x09, 0x8a, 0xbe, 0x0e, 0x27, 0x82, 0x31, 0xe5, 0x1d, 0x6d, 0x6d,
+	0x3b, 0x2c, 0x77, 0x10, 0xad, 0xf5, 0x3f, 0xdf, 0x13, 0x14, 0x3c, 0x6f, 0x79, 0xce, 0x00, 0xbf,
+	0x85, 0xa0, 0x46, 0x5e, 0x37, 0x5c, 0x0f, 0x5f, 0xc8, 0x72, 0xd7, 0x1f, 0xaf, 0x1a, 0x6e, 0x5d,
+	0xcc, 0x39, 0x5a, 0xb0, 0xfb, 0x4d, 0x04, 0xb3, 0x1d, 0x96, 0xeb, 0xe0, 0x8b, 0x85, 0x4a, 0x46,
+	0x5b, 0x4f, 0xe6, 0x1d, 0x2e, 0x71, 0xd2, 0x65, 0x67, 0xa1, 0x0c, 0x9c, 0xa4, 0xd5, 0x5d, 0x66,
+	0xe0, 0x24, 0xbd, 0xd4, 0xf2, 0x0d, 0x04, 0xb3, 0x3d, 0x86, 0xdc, 0xe2, 0xf3, 0x39, 0xea, 0x30,
+	0x7c, 0x36, 0x9e, 0xc8, 0x35, 0x56, 0xf0, 0xf0, 0x0e, 0x82, 0xb9, 0x5e, 0x58, 0x9f, 0x88, 0xf3,
+	0x10, 0xf3, 0xfd, 0xa2, 0x75, 0x21, 0xdf, 0x60, 0xc1, 0xca, 0x87, 0x08, 0x4e, 0x8e, 0x18, 0x84,
+	0x15, 0xe2, 0x60, 0x78, 0xb3, 0x78, 0xd5, 0x60, 0x6b, 0xab, 0x10, 0x0d, 0xc1, 0xdd, 0x77, 0x10,
+	0xd4, 0xf5, 0x6e, 0x97, 0x5d, 0x94, 0x5c, 0xca, 0x51, 0x99, 0x21, 0x97, 0x32, 0xb5, 0x9e, 0xca,
+	0x4f, 0x40, 0x62, 0xa7, 0x47, 0xbc, 0x8c, 0xec, 0xa4, 0x17, 0x1d, 0x66, 0x60, 0xe7, 0xb0, 0xe2,
+	0xc3, 0xef, 0x23, 0x00, 0xae, 0x3b, 0xc6, 0xd1, 0x46, 0xbe, 0x15, 0x97, 0xca, 0x02, 0x5b, 0x9b,
+	0x45, 0x48, 0x08, 0xae, 0x7e, 0x88, 0x00, 0xb8, 0xab, 0x33, 0xae, 0x36, 0x73, 0xfa, 0xab, 0xbc,
+	0x54, 0x5b, 0x85, 0x68, 0x08, 0xbe, 0xbe, 0xcd, 0x6d, 0x89, 0x26, 0x2b, 0xf8, 0xc9, 0x62, 0x55,
+	0x3e, 0xad, 0x4b, 0xb9, 0xc7, 0x4b, 0xcc, 0xf4, 0x88, 0x97, 0x91, 0x99, 0xd4, 0x22, 0xb7, 0xd6,
+	0xa5, 0x82, 0xe5, 0x64, 0xf8, 0x7b, 0x08, 0x9a, 0xdc, 0x8e, 0x76, 0xf5, 0x1e, 0x7e, 0x2a, 0x9f,
+	0x0d, 0x84, 0xa5, 0x63, 0xad, 0x8d, 0x02, 0x14, 0x24, 0xd3, 0xe6, 0x46, 0xc4, 0x96, 0x68, 0x23,
+	0x9f, 0x01, 0xc8, 0xab, 0xb4, 0x59, 0x84, 0x84, 0xe0, 0xea, 0x1b, 0x08, 0x16, 0x7a, 0x3e, 0xee,
+	0xca, 0x92, 0xb4, 0xff, 0xcf, 0xb4, 0xf6, 0x32, 0x3c, 0xd7, 0x3a, 0x9f, 0x67, 0xa8, 0x60, 0xe4,
+	0x7d, 0x04, 0x27, 0x7b, 0x12, 0xba, 0xca, 0x78, 0xc9, 0xb4, 0x11, 0xc4, 0x11, 0xe9, 0x6c, 0xa9,
+	0x46, 0x12, 0xd6, 0x7d, 0x17, 0xc1, 0x7c, 0x57, 0x02, 0x3b, 0x33, 0x70, 0x93, 0x02, 0xba, 0xb6,
+	0x2e, 0xe6, 0x1c, 0x2d, 0x71, 0x33, 0x94, 0xf0, 0xc8, 0x0c, 0xdc, 0xa4, 0x20, 0xa9, 0x19, 0xb8,
+	0x49, 0x05, 0x41, 0xdf, 0x43, 0xb0, 0x20, 0x73, 0xe3, 0xe2, 0x7c, 0x04, 0xdd, 0xec, 0x39, 0x50,
+	0xfa, 0xb7, 0x38, 0x7e, 0x86, 0xe0, 0xbf, 0xf5, 0x28, 0x98, 0xf9, 0xb4, 0xe5, 0xc8, 0x47, 0x57,
+	0x37, 0xdb, 0x76, 0x9b, 0x02, 0x70, 0x65, 0xdb, 0x6e, 0x53, 0xa1, 0x9e, 0x9f, 0x23, 0x50, 0x3b,
+	0x09, 0xa8, 0x2e, 0xc1, 0xe9, 0x66, 0xc6, 0xdc, 0x34, 0x8d, 0xd9, 0xad, 0x42, 0x34, 0x04, 0xbf,
+	0x3f, 0x42, 0xb0, 0xda, 0x63, 0xc8, 0x15, 0x43, 0x12, 0xe4, 0xdf, 0x64, 0x4b, 0x17, 0x8a, 0x71,
+	0x78, 0x04, 0x78, 0x26, 0x38, 0x4c, 0xe0, 0xbb, 0x9f, 0x3f, 0x87, 0x87, 0x21, 0x94, 0xef, 0x22,
+	0x58, 0xec, 0xca, 0x01, 0x38, 0x4b, 0x76, 0x9c, 0x3c, 0x91, 0xb7, 0x2e, 0xe4, 0x1b, 0xcc, 0xb9,
+	0x59, 0xff, 0x6c, 0x0e, 0x4e, 0xc5, 0xd0, 0x31, 0x76, 0xbe, 0x7b, 0x1f, 0xd1, 0x73, 0x25, 0xaf,
+	0xbb, 0xca, 0xb0, 0x61, 0x1e, 0x52, 0x09, 0x97, 0x61, 0xc3, 0x3c, 0xb4, 0xa8, 0x8d, 0x66, 0x5d,
+	0xa3, 0xa0, 0x16, 0x2c, 0x4b, 0x06, 0x7f, 0x58, 0x6d, 0x5a, 0x96, 0x0c, 0xfe, 0xf0, 0x22, 0xb4,
+	0x37, 0x11, 0x34, 0xfb, 0x7e, 0x91, 0x57, 0x86, 0xed, 0x32, 0x5e, 0x6a, 0x96, 0x61, 0xbb, 0x4c,
+	0xd6, 0x94, 0xbd, 0x8d, 0xa0, 0xba, 0x6f, 0x98, 0xdd, 0x0c, 0x71, 0x37, 0xad, 0x66, 0x2c, 0x43,
+	0xdc, 0x4d, 0xaf, 0xcd, 0xa2, 0xdb, 0x52, 0x4f, 0x2a, 0x74, 0xc9, 0xb6, 0x65, 0x27, 0xd8, 0xb9,
+	0x98, 0x73, 0xb4, 0xe0, 0xe6, 0x03, 0x04, 0x8b, 0xbd, 0x48, 0x0d, 0x53, 0xb6, 0x54, 0x34, 0x59,
+	0xb6, 0x95, 0x2d, 0x15, 0x4d, 0x2b, 0x9e, 0xfa, 0x10, 0xc1, 0x3c, 0x4f, 0x45, 0x79, 0x25, 0x0b,
+	0xde, 0xce, 0x59, 0x01, 0x12, 0xa9, 0xbe, 0x69, 0x5d, 0x2e, 0x48, 0x45, 0x70, 0xf7, 0x11, 0x02,
+	0x65, 0x94, 0xa8, 0xf7, 0x10, 0x87, 0xe6, 0xad, 0x29, 0xd4, 0xaa, 0xb4, 0xb6, 0x8b, 0x11, 0x09,
+	0xf1, 0x85, 0xda, 0x5d, 0xdd, 0xeb, 0xf4, 0x33, 0x18, 0x7c, 0x5a, 0x65, 0x49, 0x06, 0x83, 0x4f,
+	0xad, 0x2c, 0x79, 0x08, 0x31, 0x93, 0xef, 0x4b, 0xdf, 0xb7, 0xc2, 0xf9, 0x3e, 0xc7, 0x95, 0xdd,
+	0xe4, 0xd3, 0x3e, 0xaa, 0xb5, 0xfe, 0xc7, 0x19, 0x58, 0xba, 0x62, 0x1d, 0x10, 0xc7, 0x94, 0xd1,
+	0xba, 0x0f, 0x78, 0x36, 0x1d, 0xbd, 0xb1, 0x29, 0x02, 0x0e, 0x6d, 0xe4, 0x18, 0x1b, 0x03, 0xc0,
+	0x7f, 0x80, 0xe0, 0x44, 0x2f, 0xfa, 0xed, 0xa2, 0x5c, 0x90, 0x83, 0xfc, 0x01, 0xa6, 0x5c, 0x90,
+	0x43, 0xf4, 0xb3, 0x49, 0x6f, 0x71, 0xb6, 0x36, 0x6c, 0x7b, 0x60, 0x74, 0x74, 0xfe, 0xf1, 0xa6,
+	0xc7, 0x33, 0x9d, 0x1c, 0x42, 0x44, 0xb7, 0x75, 0x2e, 0xfb, 0x40, 0xce, 0xc6, 0xe6, 0x43, 0x30,
+	0xe9, 0x97, 0xf6, 0x5e, 0xaa, 0xb1, 0x2f, 0xf3, 0xed, 0xcd, 0xb2, 0x3f, 0x8f, 0xfc, 0x3b, 0x00,
+	0x00, 0xff, 0xff, 0x49, 0xde, 0x25, 0x73, 0xb2, 0x4f, 0x00, 0x00,
 }
diff --git a/server/core/proto/services.proto b/server/core/proto/services.proto
index 69c776b6..9e995b6e 100644
--- a/server/core/proto/services.proto
+++ b/server/core/proto/services.proto
@@ -424,6 +424,7 @@ message FindInstancesRequest {
     string serviceName = 3;
     string versionRule = 4; // version rule
     repeated string tags = 5;
+    string environment = 6;
 }
 
 message FindInstancesResponse {
diff --git a/server/govern/controller_v4.go b/server/govern/controller_v4.go
index 23d32194..91fe5115 100644
--- a/server/govern/controller_v4.go
+++ b/server/govern/controller_v4.go
@@ -71,7 +71,8 @@ func (governService *GovernServiceControllerV4) GetGraph(w http.ResponseWriter,
 		}
 		proResp, err := core.ServiceAPI.GetConsumerDependencies(ctx, proRequest)
 		if err != nil {
-			log.Errorf(err, "get providers failed. service %s", service.ServiceId)
+			log.Errorf(err, "get service[%s/%s/%s/%s]'s providers failed",
+				service.Environment, service.AppId, service.ServiceName, service.Version)
 			controller.WriteResponse(w, proResp.Response, nil)
 			return
 		}
diff --git a/server/govern/service.go b/server/govern/service.go
index 494288b4..25d4b3d3 100644
--- a/server/govern/service.go
+++ b/server/govern/service.go
@@ -80,7 +80,7 @@ func (governService *GovernService) GetServicesInfo(ctx context.Context, in *pb.
 	//获取所有服务
 	services, err := serviceUtil.GetAllServiceUtil(ctx)
 	if err != nil {
-		log.Errorf(err, "Get all services for govern service failed.")
+		log.Errorf(err, "get all services by domain failed")
 		return &pb.GetServicesInfoResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -153,7 +153,8 @@ func (governService *GovernService) GetServiceDetail(ctx context.Context, in *pb
 	}
 	versions, err := getServiceAllVersions(ctx, key)
 	if err != nil {
-		log.Errorf(err, "Get service all version failed.")
+		log.Errorf(err, "get service[%s/%s/%s] all versions failed",
+			service.Environment, service.AppId, service.ServiceName)
 		return &pb.GetServiceDetailResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -254,7 +255,7 @@ func getSchemaInfoUtil(ctx context.Context, domainProject string, serviceId stri
 		registry.WithStrKey(key),
 		registry.WithPrefix())
 	if err != nil {
-		log.Errorf(err, "Get schema failed")
+		log.Errorf(err, "get service[%s]'s schemas failed", serviceId)
 		return make([]*pb.Schema, 0), err
 	}
 	schemas := make([]*pb.Schema, 0, len(resp.Kvs))
@@ -282,14 +283,14 @@ func getServiceDetailUtil(ctx context.Context, serviceDetailOpt ServiceDetailOpt
 		case "tags":
 			tags, err := serviceUtil.GetTagsUtils(ctx, domainProject, serviceId)
 			if err != nil {
-				log.Errorf(err, "Get all tags for govern service failed.")
+				log.Errorf(err, "get service[%s]'s all tags failed", serviceId)
 				return nil, err
 			}
 			serviceDetail.Tags = tags
 		case "rules":
 			rules, err := serviceUtil.GetRulesUtil(ctx, domainProject, serviceId)
 			if err != nil {
-				log.Errorf(err, "Get all rules for govern service failed.")
+				log.Errorf(err, "get service[%s]'s all rules failed", serviceId)
 				return nil, err
 			}
 			for _, rule := range rules {
@@ -300,7 +301,7 @@ func getServiceDetailUtil(ctx context.Context, serviceDetailOpt ServiceDetailOpt
 			if serviceDetailOpt.countOnly {
 				instanceCount, err := serviceUtil.GetInstanceCountOfOneService(ctx, domainProject, serviceId)
 				if err != nil {
-					log.Errorf(err, "Get service's instances count for govern service failed.")
+					log.Errorf(err, "get number of service[%s]'s instances failed", serviceId)
 					return nil, err
 				}
 				serviceDetail.Statics.Instances = &pb.StInstance{
@@ -309,14 +310,14 @@ func getServiceDetailUtil(ctx context.Context, serviceDetailOpt ServiceDetailOpt
 			}
 			instances, err := serviceUtil.GetAllInstancesOfOneService(ctx, domainProject, serviceId)
 			if err != nil {
-				log.Errorf(err, "Get service's all instances for govern service failed.")
+				log.Errorf(err, "get service[%s]'s all instances failed", serviceId)
 				return nil, err
 			}
 			serviceDetail.Instances = instances
 		case "schemas":
 			schemas, err := getSchemaInfoUtil(ctx, domainProject, serviceId)
 			if err != nil {
-				log.Errorf(err, "Get service's all schemas for govern service failed.")
+				log.Errorf(err, "get service[%s]'s all schemas failed", serviceId)
 				return nil, err
 			}
 			serviceDetail.SchemaInfos = schemas
@@ -327,14 +328,16 @@ func getServiceDetailUtil(ctx context.Context, serviceDetailOpt ServiceDetailOpt
 				serviceUtil.WithoutSelfDependency(),
 				serviceUtil.WithSameDomainProject())
 			if err != nil {
-				log.Errorf(err, "Get service's all consumers for govern service failed.")
+				log.Errorf(err, "get service[%s][%s/%s/%s/%s]'s all consumers failed",
+					service.ServiceId, service.Environment, service.AppId, service.ServiceName, service.Version)
 				return nil, err
 			}
 			providers, err := dr.GetDependencyProviders(
 				serviceUtil.WithoutSelfDependency(),
 				serviceUtil.WithSameDomainProject())
 			if err != nil {
-				log.Errorf(err, "Get service's all providers for govern service failed.")
+				log.Errorf(err, "get service[%s][%s/%s/%s/%s]'s all providers failed",
+					service.ServiceId, service.Environment, service.AppId, service.ServiceName, service.Version)
 				return nil, err
 			}
 
@@ -343,7 +346,7 @@ func getServiceDetailUtil(ctx context.Context, serviceDetailOpt ServiceDetailOpt
 		case "":
 			continue
 		default:
-			log.Errorf(nil, "option %s from request is invalid.", opt)
+			log.Errorf(nil, "request option[%s] is invalid", opt)
 		}
 	}
 	return serviceDetail, nil
@@ -442,7 +445,7 @@ func getInstanceCountByDomain(ctx context.Context, resp chan GetInstanceCountByD
 		registry.WithCountOnly())
 	respIns, err := backend.Store().Instance().Search(ctx, instOpts...)
 	if err != nil {
-		log.Errorf(err, "get instance count under same domainId %s", domainId)
+		log.Errorf(err, "get number of instances by domain[%s]", domainId)
 	}
 	resp <- GetInstanceCountByDomainResponse{
 		err:           err,
diff --git a/server/metric/gatherer.go b/server/metric/gatherer.go
index 4d07baef..55cabd3b 100644
--- a/server/metric/gatherer.go
+++ b/server/metric/gatherer.go
@@ -68,7 +68,7 @@ func (mm *MetricsGatherer) loop(ctx context.Context) {
 			return
 		case <-ticker.C:
 			if err := mm.Collect(); err != nil {
-				log.Errorf(err, "metrics collect failed.")
+				log.Errorf(err, "metrics collect failed")
 				return
 			}
 
diff --git a/server/plugin/common.go b/server/plugin/common.go
index eedd0282..a6e40b55 100644
--- a/server/plugin/common.go
+++ b/server/plugin/common.go
@@ -36,7 +36,7 @@ func DynamicPluginFunc(pn PluginName, funcName string) pg.Symbol {
 
 	f, err := plugin.FindFunc(pn.String(), funcName)
 	if err != nil {
-		log.Errorf(err, "plugin '%s': not implemented function '%s'.", pn, funcName)
+		log.Errorf(err, "plugin '%s': not implemented function '%s'", pn, funcName)
 	}
 	return f
 }
diff --git a/server/plugin/pkg/quota/unlimit/unlimit.go b/server/plugin/pkg/quota/unlimit/unlimit.go
index e4e87eb3..55133118 100644
--- a/server/plugin/pkg/quota/unlimit/unlimit.go
+++ b/server/plugin/pkg/quota/unlimit/unlimit.go
@@ -42,7 +42,7 @@ type Unlimit struct {
 }
 
 func New() mgr.PluginInstance {
-	log.Infof("quota init, all resources are unlimited")
+	log.Warnf("quota init, all resources are unlimited")
 	return &Unlimit{}
 }
 
diff --git a/server/plugin/pkg/registry/embededetcd/embededetcd.go b/server/plugin/pkg/registry/embededetcd/embededetcd.go
index b31689f8..b66d31ed 100644
--- a/server/plugin/pkg/registry/embededetcd/embededetcd.go
+++ b/server/plugin/pkg/registry/embededetcd/embededetcd.go
@@ -64,7 +64,7 @@ func (s *EtcdEmbed) Close() {
 		s.Embed.Close()
 	}
 	s.goroutine.Close(true)
-	log.Debugf("embedded etcd client stopped.")
+	log.Debugf("embedded etcd client stopped")
 }
 
 func (s *EtcdEmbed) getPrefixEndKey(prefix []byte) []byte {
@@ -230,20 +230,20 @@ func (s *EtcdEmbed) Compact(ctx context.Context, reserve int64) error {
 		return nil
 	}
 
-	log.Infof("Compacting... revision is %d(current: %d, reserve %d)", revToCompact, curRev, reserve)
+	log.Infof("compacting... revision is %d(current: %d, reserve %d)", revToCompact, curRev, reserve)
 	_, err := s.Embed.Server.Compact(ctx, &etcdserverpb.CompactionRequest{
 		Revision: revToCompact,
 		Physical: true,
 	})
 	if err != nil {
-		log.Errorf(err, "Compact locally failed, revision is %d(current: %d, reserve %d)",
+		log.Errorf(err, "compact locally failed, revision is %d(current: %d, reserve %d)",
 			revToCompact, curRev, reserve)
 		return err
 	}
-	log.Infof("Compacted locally, revision is %d(current: %d, reserve %d)", revToCompact, curRev, reserve)
+	log.Infof("compacted locally, revision is %d(current: %d, reserve %d)", revToCompact, curRev, reserve)
 
 	// TODO defragment
-	log.Infof("Defraged locally")
+	log.Infof("defraged locally")
 
 	return nil
 }
diff --git a/server/plugin/pkg/registry/etcd/etcd.go b/server/plugin/pkg/registry/etcd/etcd.go
index 0dd4f837..13855656 100644
--- a/server/plugin/pkg/registry/etcd/etcd.go
+++ b/server/plugin/pkg/registry/etcd/etcd.go
@@ -188,11 +188,11 @@ func (c *EtcdClient) Compact(ctx context.Context, reserve int64) error {
 	t := time.Now()
 	_, err := c.Client.Compact(ctx, revToCompact, clientv3.WithCompactPhysical())
 	if err != nil {
-		log.Errorf(err, "Compact %s failed, revision is %d(current: %d, reserve %d)",
+		log.Errorf(err, "compact %s failed, revision is %d(current: %d, reserve %d)",
 			eps, revToCompact, curRev, reserve)
 		return err
 	}
-	log.LogInfoOrWarnf(t, "Compacted %s, revision is %d(current: %d, reserve %d)", eps, revToCompact, curRev, reserve)
+	log.LogInfoOrWarnf(t, "compacted %s, revision is %d(current: %d, reserve %d)", eps, revToCompact, curRev, reserve)
 
 	// TODO can not defrag! because backend will always be unavailable when space in used is too large.
 	/*for _, ep := range eps {
@@ -214,12 +214,12 @@ func (c *EtcdClient) getLeaderCurrentRevision(ctx context.Context) int64 {
 	for _, ep := range eps {
 		resp, err := c.Client.Status(ctx, ep)
 		if err != nil {
-			log.Error(fmt.Sprintf("Compact error ,can not get status from %s", ep), err)
+			log.Error(fmt.Sprintf("compact error ,can not get status from %s", ep), err)
 			continue
 		}
 		curRev = resp.Header.Revision
 		if resp.Leader == resp.Header.MemberId {
-			log.Infof("Get leader endpoint: %s, revision is %d", ep, curRev)
+			log.Infof("get leader endpoint: %s, revision is %d", ep, curRev)
 			break
 		}
 	}
@@ -647,14 +647,6 @@ func (c *EtcdClient) Watch(ctx context.Context, opts ...registry.PluginOpOption)
 
 	n := len(op.Key)
 	if n > 0 {
-		// 必须创建新的client连接
-		/*client, err := newClient(c.Client.Endpoints())
-		  if err != nil {
-		          log.Error("get manager client failed", err)
-		          return err
-		  }
-		  defer client.Close()*/
-		// 现在跟ETCD仅使用一个连接,共用client即可
 		client := clientv3.NewWatcher(c.Client)
 		defer client.Close()
 
@@ -737,13 +729,13 @@ hcLoop:
 func (c *EtcdClient) ReOpen() error {
 	client, cerr := c.newClient()
 	if cerr != nil {
-		log.Errorf(cerr, "create a new connection to etcd %v failed.",
+		log.Errorf(cerr, "create a new connection to etcd %v failed",
 			c.Endpoints)
 		return cerr
 	}
 	c.Client, client = client, c.Client
 	if cerr = client.Close(); cerr != nil {
-		log.Errorf(cerr, "failed to close the unavailable etcd client.")
+		log.Errorf(cerr, "failed to close the unavailable etcd client")
 	}
 	client = nil
 	return nil
diff --git a/server/rest/controller/v4/dependency_controller.go b/server/rest/controller/v4/dependency_controller.go
index 277edf23..a1ba925e 100644
--- a/server/rest/controller/v4/dependency_controller.go
+++ b/server/rest/controller/v4/dependency_controller.go
@@ -20,6 +20,7 @@ import (
 	"encoding/json"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/log"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/rest"
+	"github.com/apache/incubator-servicecomb-service-center/pkg/util"
 	"github.com/apache/incubator-servicecomb-service-center/server/core"
 	pb "github.com/apache/incubator-servicecomb-service-center/server/core/proto"
 	scerr "github.com/apache/incubator-servicecomb-service-center/server/error"
@@ -44,14 +45,14 @@ func (this *DependencyService) URLPatterns() []rest.Route {
 func (this *DependencyService) AddDependenciesForMicroServices(w http.ResponseWriter, r *http.Request) {
 	requestBody, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
 	request := &pb.AddDependenciesRequest{}
 	err = json.Unmarshal(requestBody, request)
 	if err != nil {
-		log.Error("Invalid json", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(requestBody))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -63,14 +64,14 @@ func (this *DependencyService) AddDependenciesForMicroServices(w http.ResponseWr
 func (this *DependencyService) CreateDependenciesForMicroServices(w http.ResponseWriter, r *http.Request) {
 	requestBody, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
 	request := &pb.CreateDependenciesRequest{}
 	err = json.Unmarshal(requestBody, request)
 	if err != nil {
-		log.Error("Invalid json", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(requestBody))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
diff --git a/server/rest/controller/v4/instance_controller.go b/server/rest/controller/v4/instance_controller.go
index 85bfb26f..a6b49038 100644
--- a/server/rest/controller/v4/instance_controller.go
+++ b/server/rest/controller/v4/instance_controller.go
@@ -51,7 +51,7 @@ func (this *MicroServiceInstanceService) URLPatterns() []rest.Route {
 func (this *MicroServiceInstanceService) RegisterInstance(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("register instance failed, body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -59,7 +59,7 @@ func (this *MicroServiceInstanceService) RegisterInstance(w http.ResponseWriter,
 	request := &pb.RegisterInstanceRequest{}
 	err = json.Unmarshal(message, request)
 	if err != nil {
-		log.Error("register instance failed, Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, "Unmarshal error")
 		return
 	}
@@ -87,7 +87,7 @@ func (this *MicroServiceInstanceService) Heartbeat(w http.ResponseWriter, r *htt
 func (this *MicroServiceInstanceService) HeartbeatSet(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("register instance failed, body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -95,7 +95,7 @@ func (this *MicroServiceInstanceService) HeartbeatSet(w http.ResponseWriter, r *
 	request := &pb.HeartbeatSetRequest{}
 	err = json.Unmarshal(message, request)
 	if err != nil {
-		log.Error("register instance failed, Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, "Unmarshal error")
 		return
 	}
@@ -133,6 +133,7 @@ func (this *MicroServiceInstanceService) FindInstances(w http.ResponseWriter, r
 		AppId:             query.Get("appId"),
 		ServiceName:       query.Get("serviceName"),
 		VersionRule:       query.Get("version"),
+		Environment:       query.Get("env"),
 		Tags:              ids,
 	}
 
@@ -206,7 +207,7 @@ func (this *MicroServiceInstanceService) UpdateMetadata(w http.ResponseWriter, r
 	query := r.URL.Query()
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -216,7 +217,7 @@ func (this *MicroServiceInstanceService) UpdateMetadata(w http.ResponseWriter, r
 	}
 	err = json.Unmarshal(message, request)
 	if err != nil {
-		log.Error("Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, "Unmarshal error")
 		return
 	}
diff --git a/server/rest/controller/v4/instance_watcher.go b/server/rest/controller/v4/instance_watcher.go
index 4495226a..7907a0f5 100644
--- a/server/rest/controller/v4/instance_watcher.go
+++ b/server/rest/controller/v4/instance_watcher.go
@@ -47,7 +47,7 @@ func upgrade(w http.ResponseWriter, r *http.Request) (*websocket.Conn, error) {
 	}
 	conn, err := upgrader.Upgrade(w, r, nil)
 	if err != nil {
-		log.Error("upgrade failed.", err)
+		log.Error("upgrade failed", err)
 		// controller.WriteError(w, scerr.ErrInternal, "Upgrade error")
 	}
 	return conn, err
diff --git a/server/rest/controller/v4/microservice_controller.go b/server/rest/controller/v4/microservice_controller.go
index 9cc450af..74277277 100644
--- a/server/rest/controller/v4/microservice_controller.go
+++ b/server/rest/controller/v4/microservice_controller.go
@@ -20,6 +20,7 @@ import (
 	"encoding/json"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/log"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/rest"
+	"github.com/apache/incubator-servicecomb-service-center/pkg/util"
 	"github.com/apache/incubator-servicecomb-service-center/server/core"
 	pb "github.com/apache/incubator-servicecomb-service-center/server/core/proto"
 	scerr "github.com/apache/incubator-servicecomb-service-center/server/error"
@@ -49,14 +50,14 @@ func (this *MicroServiceService) URLPatterns() []rest.Route {
 func (this *MicroServiceService) Register(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
 	var request pb.CreateServiceRequest
 	err = json.Unmarshal(message, &request)
 	if err != nil {
-		log.Error("Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -69,7 +70,7 @@ func (this *MicroServiceService) Register(w http.ResponseWriter, r *http.Request
 func (this *MicroServiceService) Update(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -78,7 +79,7 @@ func (this *MicroServiceService) Update(w http.ResponseWriter, r *http.Request)
 	}
 	err = json.Unmarshal(message, request)
 	if err != nil {
-		log.Error("Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -143,18 +144,18 @@ func (this *MicroServiceService) GetServiceOne(w http.ResponseWriter, r *http.Re
 }
 
 func (this *MicroServiceService) UnregisterServices(w http.ResponseWriter, r *http.Request) {
-	request_body, err := ioutil.ReadAll(r.Body)
+	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body ,err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
 
 	request := &pb.DelServicesRequest{}
 
-	err = json.Unmarshal(request_body, request)
+	err = json.Unmarshal(message, request)
 	if err != nil {
-		log.Error("unmarshal ,err ", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
diff --git a/server/rest/controller/v4/query_rule_controller.go b/server/rest/controller/v4/query_rule_controller.go
index 1370ed79..62327a9a 100644
--- a/server/rest/controller/v4/query_rule_controller.go
+++ b/server/rest/controller/v4/query_rule_controller.go
@@ -20,6 +20,7 @@ import (
 	"encoding/json"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/log"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/rest"
+	"github.com/apache/incubator-servicecomb-service-center/pkg/util"
 	"github.com/apache/incubator-servicecomb-service-center/server/core"
 	pb "github.com/apache/incubator-servicecomb-service-center/server/core/proto"
 	scerr "github.com/apache/incubator-servicecomb-service-center/server/error"
@@ -44,14 +45,14 @@ func (this *RuleService) URLPatterns() []rest.Route {
 func (this *RuleService) AddRule(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("bory err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
 	rule := map[string][]*pb.AddOrUpdateServiceRule{}
 	err = json.Unmarshal(message, &rule)
 	if err != nil {
-		log.Errorf(err, "Unmarshal error")
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -80,7 +81,7 @@ func (this *RuleService) DeleteRule(w http.ResponseWriter, r *http.Request) {
 func (this *RuleService) UpdateRule(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -88,7 +89,7 @@ func (this *RuleService) UpdateRule(w http.ResponseWriter, r *http.Request) {
 	rule := pb.AddOrUpdateServiceRule{}
 	err = json.Unmarshal(message, &rule)
 	if err != nil {
-		log.Error("Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
diff --git a/server/rest/controller/v4/schema_controller.go b/server/rest/controller/v4/schema_controller.go
index 6292c63b..ad1b4724 100644
--- a/server/rest/controller/v4/schema_controller.go
+++ b/server/rest/controller/v4/schema_controller.go
@@ -20,6 +20,7 @@ import (
 	"encoding/json"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/log"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/rest"
+	"github.com/apache/incubator-servicecomb-service-center/pkg/util"
 	"github.com/apache/incubator-servicecomb-service-center/server/core"
 	pb "github.com/apache/incubator-servicecomb-service-center/server/core/proto"
 	scerr "github.com/apache/incubator-servicecomb-service-center/server/error"
@@ -60,7 +61,7 @@ func (this *SchemaService) GetSchemas(w http.ResponseWriter, r *http.Request) {
 func (this *SchemaService) ModifySchema(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -68,7 +69,7 @@ func (this *SchemaService) ModifySchema(w http.ResponseWriter, r *http.Request)
 	request := &pb.ModifySchemaRequest{}
 	err = json.Unmarshal(message, request)
 	if err != nil {
-		log.Error("Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -82,7 +83,7 @@ func (this *SchemaService) ModifySchema(w http.ResponseWriter, r *http.Request)
 func (this *SchemaService) ModifySchemas(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
@@ -90,7 +91,7 @@ func (this *SchemaService) ModifySchemas(w http.ResponseWriter, r *http.Request)
 	request := &pb.ModifySchemasRequest{}
 	err = json.Unmarshal(message, request)
 	if err != nil {
-		log.Error("Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
diff --git a/server/rest/controller/v4/tag_controller.go b/server/rest/controller/v4/tag_controller.go
index d32d6e56..48256403 100644
--- a/server/rest/controller/v4/tag_controller.go
+++ b/server/rest/controller/v4/tag_controller.go
@@ -20,6 +20,7 @@ import (
 	"encoding/json"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/log"
 	"github.com/apache/incubator-servicecomb-service-center/pkg/rest"
+	"github.com/apache/incubator-servicecomb-service-center/pkg/util"
 	"github.com/apache/incubator-servicecomb-service-center/server/core"
 	pb "github.com/apache/incubator-servicecomb-service-center/server/core/proto"
 	scerr "github.com/apache/incubator-servicecomb-service-center/server/error"
@@ -45,14 +46,14 @@ func (this *TagService) URLPatterns() []rest.Route {
 func (this *TagService) AddTags(w http.ResponseWriter, r *http.Request) {
 	message, err := ioutil.ReadAll(r.Body)
 	if err != nil {
-		log.Error("body err", err)
+		log.Error("read body failed", err)
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
 	var tags map[string]map[string]string
 	err = json.Unmarshal(message, &tags)
 	if err != nil {
-		log.Error("Unmarshal error", err)
+		log.Errorf(err, "Invalid json: %s", util.BytesToStringWithNoCopy(message))
 		controller.WriteError(w, scerr.ErrInvalidParams, err.Error())
 		return
 	}
diff --git a/server/service/dependency.go b/server/service/dependency.go
index 8ba1bb55..d1e95549 100644
--- a/server/service/dependency.go
+++ b/server/service/dependency.go
@@ -60,7 +60,7 @@ func (s *MicroServiceService) AddOrUpdateDependencies(ctx context.Context, depen
 	opts := make([]registry.PluginOp, 0, len(dependencyInfos))
 	domainProject := util.ParseDomainProject(ctx)
 	for _, dependencyInfo := range dependencyInfos {
-		consumerFlag := util.StringJoin([]string{dependencyInfo.Consumer.AppId, dependencyInfo.Consumer.ServiceName, dependencyInfo.Consumer.Version}, "/")
+		consumerFlag := util.StringJoin([]string{dependencyInfo.Consumer.Environment, dependencyInfo.Consumer.AppId, dependencyInfo.Consumer.ServiceName, dependencyInfo.Consumer.Version}, "/")
 		consumerInfo := pb.DependenciesToKeys([]*pb.MicroServiceKey{dependencyInfo.Consumer}, domainProject)[0]
 		providersInfo := pb.DependenciesToKeys(dependencyInfo.Providers, domainProject)
 
@@ -73,12 +73,12 @@ func (s *MicroServiceService) AddOrUpdateDependencies(ctx context.Context, depen
 
 		consumerId, err := serviceUtil.GetServiceId(ctx, consumerInfo)
 		if err != nil {
-			log.Errorf(err, "put request into dependency queue failed, override: %t, get consumer %s id failed",
+			log.Errorf(err, "put request into dependency queue failed, override: %t, get consumer[%s] id failed",
 				override, consumerFlag)
 			return pb.CreateResponse(scerr.ErrInternal, err.Error()), err
 		}
 		if len(consumerId) == 0 {
-			log.Errorf(nil, "put request into dependency queue failed, override: %t, consumer %s does not exist.",
+			log.Errorf(nil, "put request into dependency queue failed, override: %t, consumer[%s] does not exist",
 				override, consumerFlag)
 			return pb.CreateResponse(scerr.ErrServiceNotExists, fmt.Sprintf("Consumer %s does not exist.", consumerFlag)), nil
 		}
@@ -86,7 +86,7 @@ func (s *MicroServiceService) AddOrUpdateDependencies(ctx context.Context, depen
 		dependencyInfo.Override = override
 		data, err := json.Marshal(dependencyInfo)
 		if err != nil {
-			log.Errorf(err, "put request into dependency queue failed, override: %t, marshal consumer %s dependency failed",
+			log.Errorf(err, "put request into dependency queue failed, override: %t, marshal consumer[%s] dependency failed",
 				override, consumerFlag)
 			return pb.CreateResponse(scerr.ErrInternal, err.Error()), err
 		}
@@ -113,7 +113,7 @@ func (s *MicroServiceService) AddOrUpdateDependencies(ctx context.Context, depen
 func (s *MicroServiceService) GetProviderDependencies(ctx context.Context, in *pb.GetDependenciesRequest) (*pb.GetProDependenciesResponse, error) {
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "GetProviderDependencies failed for validating parameters failed.")
+		log.Errorf(err, "GetProviderDependencies failed for validating parameters failed")
 		return &pb.GetProDependenciesResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -123,11 +123,11 @@ func (s *MicroServiceService) GetProviderDependencies(ctx context.Context, in *p
 
 	provider, err := serviceUtil.GetService(ctx, domainProject, providerServiceId)
 	if err != nil {
-		log.Errorf(err, "GetProviderDependencies failed, %s.", providerServiceId)
+		log.Errorf(err, "GetProviderDependencies failed, provider is %s", providerServiceId)
 		return nil, err
 	}
 	if provider == nil {
-		log.Errorf(err, "GetProviderDependencies failed for provider does not exist, %s.", providerServiceId)
+		log.Errorf(err, "GetProviderDependencies failed for provider[%s] does not exist", providerServiceId)
 		return &pb.GetProDependenciesResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Provider does not exist"),
 		}, nil
@@ -136,7 +136,8 @@ func (s *MicroServiceService) GetProviderDependencies(ctx context.Context, in *p
 	dr := serviceUtil.NewProviderDependencyRelation(ctx, domainProject, provider)
 	services, err := dr.GetDependencyConsumers(toDependencyFilterOptions(in)...)
 	if err != nil {
-		log.Errorf(err, "GetProviderDependencies failed.")
+		log.Errorf(err, "GetProviderDependencies failed, provider is %s/%s/%s/%s",
+			provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
 		return &pb.GetProDependenciesResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -150,7 +151,7 @@ func (s *MicroServiceService) GetProviderDependencies(ctx context.Context, in *p
 func (s *MicroServiceService) GetConsumerDependencies(ctx context.Context, in *pb.GetDependenciesRequest) (*pb.GetConDependenciesResponse, error) {
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "GetConsumerDependencies failed for validating parameters failed.")
+		log.Errorf(err, "GetConsumerDependencies failed for validating parameters failed")
 		return &pb.GetConDependenciesResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -160,13 +161,13 @@ func (s *MicroServiceService) GetConsumerDependencies(ctx context.Context, in *p
 
 	consumer, err := serviceUtil.GetService(ctx, domainProject, consumerId)
 	if err != nil {
-		log.Errorf(err, "GetConsumerDependencies failed for get consumer failed.")
+		log.Errorf(err, "GetConsumerDependencies failed, consumer is %s", consumerId)
 		return &pb.GetConDependenciesResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if consumer == nil {
-		log.Errorf(err, "GetConsumerDependencies failed for consumer does not exist, %s.", consumerId)
+		log.Errorf(err, "GetConsumerDependencies failed for consumer[%s] does not exist", consumerId)
 		return &pb.GetConDependenciesResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Consumer does not exist"),
 		}, nil
@@ -175,7 +176,8 @@ func (s *MicroServiceService) GetConsumerDependencies(ctx context.Context, in *p
 	dr := serviceUtil.NewConsumerDependencyRelation(ctx, domainProject, consumer)
 	services, err := dr.GetDependencyProviders(toDependencyFilterOptions(in)...)
 	if err != nil {
-		log.Errorf(err, "GetConsumerDependencies failed for get providers failed.")
+		log.Errorf(err, "GetConsumerDependencies failed, consumer is %s/%s/%s/%s",
+			consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version)
 		return &pb.GetConDependenciesResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
diff --git a/server/service/event/dependency_event_handler.go b/server/service/event/dependency_event_handler.go
index b2b2104d..8661acd3 100644
--- a/server/service/event/dependency_event_handler.go
+++ b/server/service/event/dependency_event_handler.go
@@ -158,7 +158,7 @@ func (h *DependencyEventHandler) dependencyRuleHandle(res interface{}) error {
 	ctx := context.Background()
 	dependencyEventHandlerRes := res.(*DependencyEventHandlerResource)
 	r := dependencyEventHandlerRes.dep
-	consumerFlag := util.StringJoin([]string{r.Consumer.AppId, r.Consumer.ServiceName, r.Consumer.Version}, "/")
+	consumerFlag := util.StringJoin([]string{r.Consumer.Environment, r.Consumer.AppId, r.Consumer.ServiceName, r.Consumer.Version}, "/")
 
 	domainProject := dependencyEventHandlerRes.domainProject
 	consumerInfo := pb.DependenciesToKeys([]*pb.MicroServiceKey{r.Consumer}, domainProject)[0]
@@ -185,7 +185,7 @@ func (h *DependencyEventHandler) dependencyRuleHandle(res interface{}) error {
 		return err
 	}
 
-	log.Infof("maintain dependency %v successfully, override: %t", r, r.Override)
+	log.Infof("maintain dependency [%v] successfully", r)
 	return nil
 }
 
@@ -205,7 +205,7 @@ func (h *DependencyEventHandler) removeKV(ctx context.Context, kv *discovery.Key
 func (h *DependencyEventHandler) CleanUp(domainProjects map[string]struct{}) {
 	for domainProject := range domainProjects {
 		if err := serviceUtil.CleanUpDependencyRules(context.Background(), domainProject); err != nil {
-			log.Errorf(err, "clean up '%s' dependency rules failed")
+			log.Errorf(err, "clean up '%s' dependency rules failed", domainProject)
 		}
 	}
 }
diff --git a/server/service/event/instance_event_handler.go b/server/service/event/instance_event_handler.go
index e781f702..0d7c363e 100644
--- a/server/service/event/instance_event_handler.go
+++ b/server/service/event/instance_event_handler.go
@@ -70,7 +70,7 @@ func (h *InstanceEventHandler) OnEvent(evt discovery.KvEvent) {
 	ctx := util.SetContext(context.Background(), serviceUtil.CTX_CACHEONLY, "1")
 	ms, err := serviceUtil.GetService(ctx, domainProject, providerId)
 	if ms == nil {
-		log.Errorf(err, "get provider service %s/%s id in cache failed",
+		log.Errorf(err, "get cached provider[%s/%s]'s file failed",
 			providerId, providerInstanceId)
 		return
 	}
@@ -78,7 +78,7 @@ func (h *InstanceEventHandler) OnEvent(evt discovery.KvEvent) {
 	// 查询所有consumer
 	consumerIds, _, err := serviceUtil.GetAllConsumerIds(ctx, domainProject, ms)
 	if err != nil {
-		log.Errorf(err, "query service %s consumers failed", providerId)
+		log.Errorf(err, "get service[%s]'s consumerIds failed", providerId)
 		return
 	}
 
diff --git a/server/service/event/rule_event_handler.go b/server/service/event/rule_event_handler.go
index f609473d..53b09a72 100644
--- a/server/service/event/rule_event_handler.go
+++ b/server/service/event/rule_event_handler.go
@@ -57,17 +57,17 @@ func (apt *RulesChangedTask) publish(ctx context.Context, domainProject, provide
 
 	provider, err := serviceUtil.GetService(ctx, domainProject, providerId)
 	if err != nil {
-		log.Errorf(err, "get provider %s service file failed", providerId)
+		log.Errorf(err, "get provider[%s] service file failed", providerId)
 		return err
 	}
 	if provider == nil {
-		log.Errorf(nil, "provider %s does not exist", providerId)
+		log.Errorf(nil, "provider[%s] does not exist", providerId)
 		return fmt.Errorf("provider %s does not exist", providerId)
 	}
 
 	consumerIds, err := serviceUtil.GetConsumerIds(ctx, domainProject, provider)
 	if err != nil {
-		log.Errorf(err, "get consumer services by provider %s failed", providerId)
+		log.Errorf(err, "get service[%s]'s consumerIds failed", providerId)
 		return err
 	}
 	providerKey := pb.MicroServiceToKey(domainProject, provider)
diff --git a/server/service/event/service_event_handler.go b/server/service/event/service_event_handler.go
index 542b2498..ce6e08c8 100644
--- a/server/service/event/service_event_handler.go
+++ b/server/service/event/service_event_handler.go
@@ -49,7 +49,7 @@ func (h *ServiceEventHandler) OnEvent(evt discovery.KvEvent) {
 		newProject := domainProject[strings.Index(domainProject, "/")+1:]
 		err := serviceUtil.NewDomainProject(context.Background(), newDomain, newProject)
 		if err != nil {
-			log.Errorf(err, "new domain(%s) or project(%s) failed", newDomain, newProject)
+			log.Errorf(err, "new domain[%s] or project[%s] failed", newDomain, newProject)
 		}
 	case pb.EVT_DELETE:
 		metrics.ReportServices(fn, fv, -1)
diff --git a/server/service/event/tag_event_handler.go b/server/service/event/tag_event_handler.go
index 2f9706a9..ad42578a 100644
--- a/server/service/event/tag_event_handler.go
+++ b/server/service/event/tag_event_handler.go
@@ -58,12 +58,12 @@ func (apt *TagsChangedTask) publish(ctx context.Context, domainProject, consumer
 
 	consumer, err := serviceUtil.GetService(ctx, domainProject, consumerId)
 	if err != nil {
-		log.Errorf(err, "get consumer for publish event %s failed", consumerId)
+		log.Errorf(err, "get consumer[%s] for publish event failed", consumerId)
 		return err
 	}
 	if consumer == nil {
-		log.Errorf(nil, "service not exist, %s", consumerId)
-		return fmt.Errorf("service not exist, %s", consumerId)
+		log.Errorf(nil, "consumer[%s] does not exist", consumerId)
+		return fmt.Errorf("consumer[%s] does not exist", consumerId)
 	}
 
 	serviceKey := pb.MicroServiceToKey(domainProject, consumer)
@@ -71,14 +71,14 @@ func (apt *TagsChangedTask) publish(ctx context.Context, domainProject, consumer
 
 	providerIds, err := serviceUtil.GetProviderIds(ctx, domainProject, consumer)
 	if err != nil {
-		log.Errorf(err, "get provider services by consumer %s failed", consumerId)
+		log.Errorf(err, "get service[%s]'s providerIds failed", consumerId)
 		return err
 	}
 
 	for _, providerId := range providerIds {
 		provider, err := serviceUtil.GetService(ctx, domainProject, providerId)
 		if provider == nil {
-			log.Errorf(err, "get service %s file failed", providerId)
+			log.Errorf(err, "get service[%s]'s provider[%s] file failed", consumerId, providerId)
 			continue
 		}
 
diff --git a/server/service/instance.go b/server/service/instance.go
index 54f4ec6f..eddd3129 100644
--- a/server/service/instance.go
+++ b/server/service/instance.go
@@ -103,8 +103,8 @@ func (s *InstanceService) Register(ctx context.Context, in *pb.RegisterInstanceR
 	//如果没填写 并且endpoints沒重復,則产生新的全局instance id
 	oldInstanceId, checkErr := serviceUtil.InstanceExist(ctx, in.Instance)
 	if checkErr != nil {
-		log.Errorf(checkErr, "instance existence check failed, endpoints %v, host '%s', serviceId %s, operator %s",
-			instance.Endpoints, instance.HostName, instance.ServiceId, remoteIP)
+		log.Errorf(checkErr, "service[%s]'s instance existence check failed, endpoints %v, host '%s', operator %s",
+			instance.ServiceId, instance.Endpoints, instance.HostName, remoteIP)
 		resp := pb.CreateResponseWithSCErr(checkErr)
 		if checkErr.InternalError() {
 			return &pb.RegisterInstanceResponse{Response: resp}, checkErr
@@ -112,17 +112,17 @@ func (s *InstanceService) Register(ctx context.Context, in *pb.RegisterInstanceR
 		return &pb.RegisterInstanceResponse{Response: resp}, nil
 	}
 	if len(oldInstanceId) > 0 {
-		log.Infof("register instance successful, reuse service %s instance %s, operator %s",
+		log.Infof("register instance successful, reuse instance[%s/%s], operator %s",
 			instance.ServiceId, oldInstanceId, remoteIP)
 		return &pb.RegisterInstanceResponse{
-			Response:   pb.CreateResponse(pb.Response_SUCCESS, "instance more exist"),
+			Response:   pb.CreateResponse(pb.Response_SUCCESS, "instance already exists"),
 			InstanceId: oldInstanceId,
 		}, nil
 	}
 
 	if err := s.preProcessRegisterInstance(ctx, instance); err != nil {
-		log.Errorf(err, "register instance failed, endpoints %v, host '%s', serviceId %s, operator %s",
-			instance.Endpoints, instance.HostName, instance.ServiceId, remoteIP)
+		log.Errorf(err, "register service[%s]'s instance failed, endpoints %v, host '%s', operator %s",
+			instance.ServiceId, instance.Endpoints, instance.HostName, remoteIP)
 		return &pb.RegisterInstanceResponse{
 			Response: pb.CreateResponseWithSCErr(err),
 		}, nil
@@ -225,7 +225,7 @@ func (s *InstanceService) Unregister(ctx context.Context, in *pb.UnregisterInsta
 	remoteIP := util.GetIPFromContext(ctx)
 
 	if err := Validate(in); err != nil {
-		log.Errorf(err, "unregister instance failed, invalid parameters, operator %s.", remoteIP)
+		log.Errorf(err, "unregister instance failed, invalid parameters, operator %s", remoteIP)
 		return &pb.UnregisterInstanceResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -239,13 +239,13 @@ func (s *InstanceService) Unregister(ctx context.Context, in *pb.UnregisterInsta
 
 	isExist, err := serviceUtil.InstanceExistById(ctx, domainProject, serviceId, instanceId)
 	if err != nil {
-		log.Errorf(err, "unregister instance failed, instance %s, operator %s: query instance failed.", instanceFlag, remoteIP)
+		log.Errorf(err, "unregister instance failed, instance[%s], operator %s: query instance failed", instanceFlag, remoteIP)
 		return &pb.UnregisterInstanceResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if !isExist {
-		log.Errorf(nil, "unregister instance failed, instance %s, operator %s: instance not exist.", instanceFlag, remoteIP)
+		log.Errorf(nil, "unregister instance failed, instance[%s], operator %s: instance not exist", instanceFlag, remoteIP)
 		return &pb.UnregisterInstanceResponse{
 			Response: pb.CreateResponse(scerr.ErrInstanceNotExists, "Service instance does not exist."),
 		}, nil
@@ -253,7 +253,7 @@ func (s *InstanceService) Unregister(ctx context.Context, in *pb.UnregisterInsta
 
 	err, isInnerErr := revokeInstance(ctx, domainProject, serviceId, instanceId)
 	if err != nil {
-		log.Errorf(nil, "unregister instance failed, instance %s, operator %s: revoke instance failed.", instanceFlag, remoteIP)
+		log.Errorf(nil, "unregister instance failed, instance[%s], operator %s: revoke instance failed", instanceFlag, remoteIP)
 		if isInnerErr {
 			return &pb.UnregisterInstanceResponse{
 				Response: pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()),
@@ -264,7 +264,7 @@ func (s *InstanceService) Unregister(ctx context.Context, in *pb.UnregisterInsta
 		}, nil
 	}
 
-	log.Infof("unregister instance %s, operator %s.", instanceFlag, remoteIP)
+	log.Infof("unregister instance[%s], operator %s", instanceFlag, remoteIP)
 	return &pb.UnregisterInstanceResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Unregister service instance successfully."),
 	}, nil
@@ -290,7 +290,7 @@ func (s *InstanceService) Heartbeat(ctx context.Context, in *pb.HeartbeatRequest
 	remoteIP := util.GetIPFromContext(ctx)
 
 	if err := Validate(in); err != nil {
-		log.Errorf(err, "heartbeat failed, invalid parameters, operator %s.", remoteIP)
+		log.Errorf(err, "heartbeat failed, invalid parameters, operator %s", remoteIP)
 		return &pb.HeartbeatResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -301,7 +301,7 @@ func (s *InstanceService) Heartbeat(ctx context.Context, in *pb.HeartbeatRequest
 
 	_, ttl, err, isInnerErr := serviceUtil.HeartbeatUtil(ctx, domainProject, in.ServiceId, in.InstanceId)
 	if err != nil {
-		log.Errorf(err, "heartbeat failed, instance %s, internal error '%v'. operator: %s",
+		log.Errorf(err, "heartbeat failed, instance[%s], internal error '%v'. operator %s",
 			instanceFlag, isInnerErr, remoteIP)
 		if isInnerErr {
 			return &pb.HeartbeatResponse{
@@ -315,9 +315,9 @@ func (s *InstanceService) Heartbeat(ctx context.Context, in *pb.HeartbeatRequest
 
 	if ttl == 0 {
 		log.Errorf(errors.New("connect backend timed out"),
-			"heartbeat successful, but renew %s failed. operator: %s", instanceFlag, remoteIP)
+			"heartbeat successful, but renew instance[%s] failed. operator %s", instanceFlag, remoteIP)
 	} else {
-		log.Infof("heartbeat successful: %s renew ttl to %d. operator: %s", instanceFlag, ttl, remoteIP)
+		log.Infof("heartbeat successful, renew instance[%s] ttl to %d. operator %s", instanceFlag, ttl, remoteIP)
 	}
 	return &pb.HeartbeatResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service instance heartbeat successfully."),
@@ -326,7 +326,7 @@ func (s *InstanceService) Heartbeat(ctx context.Context, in *pb.HeartbeatRequest
 
 func (s *InstanceService) HeartbeatSet(ctx context.Context, in *pb.HeartbeatSetRequest) (*pb.HeartbeatSetResponse, error) {
 	if len(in.Instances) == 0 {
-		log.Errorf(nil, "heartbeats failed, invalid request. Body not contain Instances or is empty.")
+		log.Errorf(nil, "heartbeats failed, invalid request. Body not contain Instances or is empty")
 		return &pb.HeartbeatSetResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, "Request format invalid."),
 		}, nil
@@ -339,7 +339,7 @@ func (s *InstanceService) HeartbeatSet(ctx context.Context, in *pb.HeartbeatSetR
 	noMultiCounter := 0
 	for _, heartbeatElement := range in.Instances {
 		if _, ok := existFlag[heartbeatElement.ServiceId+heartbeatElement.InstanceId]; ok {
-			log.Warnf("heartbeat set %s/%s multiple", heartbeatElement.ServiceId, heartbeatElement.InstanceId)
+			log.Warnf("instance[%s/%s] is duplicate in heartbeat set", heartbeatElement.ServiceId, heartbeatElement.InstanceId)
 			continue
 		} else {
 			existFlag[heartbeatElement.ServiceId+heartbeatElement.InstanceId] = true
@@ -364,13 +364,13 @@ func (s *InstanceService) HeartbeatSet(ctx context.Context, in *pb.HeartbeatSetR
 		}
 	}
 	if !failFlag && successFlag {
-		log.Infof("heartbeat set success")
+		log.Infof("batch update heartbeats[%s] successfully", count)
 		return &pb.HeartbeatSetResponse{
 			Response:  pb.CreateResponse(pb.Response_SUCCESS, "Heartbeat set successfully."),
 			Instances: instanceHbRstArr,
 		}, nil
 	} else {
-		log.Errorf(nil, "heartbeat set failed, %v", in.Instances)
+		log.Errorf(nil, "batch update heartbeats failed, %v", in.Instances)
 		return &pb.HeartbeatSetResponse{
 			Response:  pb.CreateResponse(scerr.ErrInstanceNotExists, "Heartbeat set failed."),
 			Instances: instanceHbRstArr,
@@ -396,13 +396,19 @@ func getHeartbeatFunc(ctx context.Context, domainProject string, instancesHbRst
 
 func (s *InstanceService) GetOneInstance(ctx context.Context, in *pb.GetOneInstanceRequest) (*pb.GetOneInstanceResponse, error) {
 	if err := Validate(in); err != nil {
-		log.Errorf(err, "get instance failed: invalid parameters.")
+		log.Errorf(err, "get instance failed: invalid parameters")
 		return &pb.GetOneInstanceResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
 	}
+
+	cpFunc := func() string {
+		return fmt.Sprintf("consumer[%s] get provider instance[%s/%s]",
+			in.ConsumerServiceId, in.ProviderServiceId, in.ProviderInstanceId)
+	}
+
 	if checkErr := s.getInstancePreCheck(ctx, in.ProviderServiceId, in.ConsumerServiceId, in.Tags); checkErr != nil {
-		log.Errorf(checkErr, "get instance failed: pre check failed.")
+		log.Errorf(checkErr, "%s failed: pre check failed", cpFunc())
 		resp := &pb.GetOneInstanceResponse{
 			Response: pb.CreateResponseWithSCErr(checkErr),
 		}
@@ -411,19 +417,18 @@ func (s *InstanceService) GetOneInstance(ctx context.Context, in *pb.GetOneInsta
 		}
 		return resp, nil
 	}
-	conPro := util.StringJoin([]string{in.ConsumerServiceId, in.ProviderServiceId, in.ProviderInstanceId}, "/")
 
 	serviceId := in.ProviderServiceId
 	instanceId := in.ProviderInstanceId
 	instance, err := serviceUtil.GetInstance(ctx, util.ParseTargetDomainProject(ctx), serviceId, instanceId)
 	if err != nil {
-		log.Errorf(err, "get instance failed, %s(consumer/provider): get instance failed.", conPro)
+		log.Errorf(err, "%s failed: get instance failed", cpFunc())
 		return &pb.GetOneInstanceResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if instance == nil {
-		log.Errorf(nil, "get instance failed, %s(consumer/provider): instance not exist.", conPro)
+		log.Errorf(nil, "%s failed: instance does not exist", cpFunc())
 		return &pb.GetOneInstanceResponse{
 			Response: pb.CreateResponse(scerr.ErrInstanceNotExists, "Service instance does not exist."),
 		}, nil
@@ -463,13 +468,19 @@ func (s *InstanceService) getInstancePreCheck(ctx context.Context, providerServi
 
 func (s *InstanceService) GetInstances(ctx context.Context, in *pb.GetInstancesRequest) (*pb.GetInstancesResponse, error) {
 	if err := Validate(in); err != nil {
-		log.Errorf(err, "get instances failed: invalid parameters.")
+		log.Errorf(err, "get instances failed: invalid parameters")
 		return &pb.GetInstancesResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
 	}
+
+	cpFunc := func() string {
+		return fmt.Sprintf("consumer[%s] get provider[%s] instances",
+			in.ConsumerServiceId, in.ProviderServiceId)
+	}
+
 	if checkErr := s.getInstancePreCheck(ctx, in.ProviderServiceId, in.ConsumerServiceId, in.Tags); checkErr != nil {
-		log.Errorf(checkErr, "get instances failed: pre check failed.")
+		log.Errorf(checkErr, "%s failed: pre check failed", cpFunc())
 		resp := &pb.GetInstancesResponse{
 			Response: pb.CreateResponseWithSCErr(checkErr),
 		}
@@ -478,11 +489,10 @@ func (s *InstanceService) GetInstances(ctx context.Context, in *pb.GetInstancesR
 		}
 		return resp, nil
 	}
-	conPro := util.StringJoin([]string{in.ConsumerServiceId, in.ProviderServiceId}, "/")
 
 	instances, err := serviceUtil.GetAllInstancesOfOneService(ctx, util.ParseTargetDomainProject(ctx), in.ProviderServiceId)
 	if err != nil {
-		log.Errorf(err, "get instances failed, %s(consumer/provider): get instances from etcd failed.", conPro)
+		log.Errorf(err, "%s failed", cpFunc())
 		return &pb.GetInstancesResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -496,7 +506,7 @@ func (s *InstanceService) GetInstances(ctx context.Context, in *pb.GetInstancesR
 func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest) (*pb.FindInstancesResponse, error) {
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "find instance failed: invalid parameters.")
+		log.Errorf(err, "find instance failed: invalid parameters")
 		return &pb.FindInstancesResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -504,26 +514,27 @@ func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest)
 
 	domainProject := util.ParseDomainProject(ctx)
 
-	service := &pb.MicroService{}
+	service := &pb.MicroService{Environment: in.Environment}
 	if len(in.ConsumerServiceId) > 0 {
 		service, err = serviceUtil.GetService(ctx, domainProject, in.ConsumerServiceId)
 		if err != nil {
-			log.Errorf(err, "get consumer failed, consumer %s find provider %s/%s/%s",
-				in.ConsumerServiceId, in.AppId, in.ServiceName, in.VersionRule)
+			log.Errorf(err, "get consumer failed, consumer[%s] find provider[%s/%s/%s/%s]",
+				in.ConsumerServiceId, in.Environment, in.AppId, in.ServiceName, in.VersionRule)
 			return &pb.FindInstancesResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 			}, err
 		}
 		if service == nil {
-			log.Errorf(nil, "consumer not exist, consumer %s find provider %s/%s/%s",
-				in.ConsumerServiceId, in.AppId, in.ServiceName, in.VersionRule)
+			log.Errorf(nil, "consumer does not exist, consumer[%s] find provider[%s/%s/%s/%s]",
+				in.ConsumerServiceId, in.Environment, in.AppId, in.ServiceName, in.VersionRule)
 			return &pb.FindInstancesResponse{
-				Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Consumer does not exist."),
+				Response: pb.CreateResponse(scerr.ErrServiceNotExists,
+					fmt.Sprintf("Consumer[%s] does not exist.", in.ConsumerServiceId)),
 			}, nil
 		}
 	}
 
-	var findFlag string
+	var findFlag func() string
 	provider := &pb.MicroServiceKey{
 		Tenant:      util.ParseTargetDomainProject(ctx),
 		Environment: service.Environment,
@@ -536,16 +547,22 @@ func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest)
 		// it means the shared micro-services must be the same env with SC.
 		provider.Environment = apt.Service.Environment
 
-		findFlag = fmt.Sprintf("consumer '%s' find shared service %s/%s/%s/%s", in.ConsumerServiceId,
-			service.Environment, in.AppId, in.ServiceName, in.VersionRule)
+		findFlag = func() string {
+			return fmt.Sprintf("Consumer[%s][%s/%s/%s/%s] find shared provider[%s/%s/%s/%s]",
+				in.ConsumerServiceId, service.Environment, service.AppId, service.ServiceName, service.Version,
+				provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
+		}
 	} else {
 		// provider is not a shared micro-service,
 		// only allow shared micro-service instances found in different domains.
 		util.SetTargetDomainProject(ctx, util.ParseDomain(ctx), util.ParseProject(ctx))
 		provider.Tenant = util.ParseTargetDomainProject(ctx)
 
-		findFlag = fmt.Sprintf("consumer '%s' find service %s/%s/%s/%s", in.ConsumerServiceId,
-			service.Environment, in.AppId, in.ServiceName, in.VersionRule)
+		findFlag = func() string {
+			return fmt.Sprintf("Consumer[%s][%s/%s/%s/%s] find provider[%s/%s/%s/%s]",
+				in.ConsumerServiceId, service.Environment, service.AppId, service.ServiceName, service.Version,
+				provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
+		}
 	}
 
 	// cache
@@ -558,13 +575,13 @@ func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest)
 	for i := 0; i < 2; i++ {
 		item, err = cache.FindInstances.Get(cloneCtx, service, provider, in.Tags)
 		if err != nil {
-			log.Errorf(err, "FindInstancesCache.Get failed, %s", findFlag)
+			log.Errorf(err, "FindInstancesCache.Get failed, %s failed", findFlag())
 			return &pb.FindInstancesResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 			}, err
 		}
 		if item == nil {
-			mes := fmt.Errorf("provider does not exist, %s", findFlag)
+			mes := fmt.Errorf("%s failed, provider does not exist.", findFlag())
 			log.Errorf(mes, "FindInstancesCache.Get failed")
 			return &pb.FindInstancesResponse{
 				Response: pb.CreateResponse(scerr.ErrServiceNotExists, mes.Error()),
@@ -586,14 +603,14 @@ func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest)
 		if provider != nil {
 			err = serviceUtil.AddServiceVersionRule(ctx, domainProject, service, provider)
 		} else {
-			mes := fmt.Errorf("provider does not exist, %s", findFlag)
+			mes := fmt.Errorf("%s failed, provider does not exist.", findFlag())
 			log.Errorf(mes, "AddServiceVersionRule failed")
 			return &pb.FindInstancesResponse{
 				Response: pb.CreateResponse(scerr.ErrServiceNotExists, mes.Error()),
 			}, nil
 		}
 		if err != nil {
-			log.Errorf(err, "AddServiceVersionRule failed, %s", findFlag)
+			log.Errorf(err, "AddServiceVersionRule failed, %s failed", findFlag())
 			return &pb.FindInstancesResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 			}, err
@@ -628,7 +645,7 @@ func (s *InstanceService) UpdateStatus(ctx context.Context, in *pb.UpdateInstanc
 	domainProject := util.ParseDomainProject(ctx)
 	updateStatusFlag := util.StringJoin([]string{in.ServiceId, in.InstanceId, in.Status}, "/")
 	if err := Validate(in); err != nil {
-		log.Errorf(nil, "update instance status failed, %s.", updateStatusFlag)
+		log.Errorf(nil, "update instance[%s] status failed", updateStatusFlag)
 		return &pb.UpdateInstanceStatusResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -636,13 +653,13 @@ func (s *InstanceService) UpdateStatus(ctx context.Context, in *pb.UpdateInstanc
 
 	instance, err := serviceUtil.GetInstance(ctx, domainProject, in.ServiceId, in.InstanceId)
 	if err != nil {
-		log.Errorf(err, "update instance status failed, %s: get instance from etcd failed.", updateStatusFlag)
+		log.Errorf(err, "update instance[%s] status failed", updateStatusFlag)
 		return &pb.UpdateInstanceStatusResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if instance == nil {
-		log.Errorf(nil, "update instance status failed, %s: instance not exist.", updateStatusFlag)
+		log.Errorf(nil, "update instance[%s] status failed, instance does not exist", updateStatusFlag)
 		return &pb.UpdateInstanceStatusResponse{
 			Response: pb.CreateResponse(scerr.ErrInstanceNotExists, "Service instance does not exist."),
 		}, nil
@@ -652,7 +669,7 @@ func (s *InstanceService) UpdateStatus(ctx context.Context, in *pb.UpdateInstanc
 	copyInstanceRef.Status = in.Status
 
 	if err := serviceUtil.UpdateInstance(ctx, domainProject, &copyInstanceRef); err != nil {
-		log.Errorf(err, "update instance status failed, %s", updateStatusFlag)
+		log.Errorf(err, "update instance[%s] status failed", updateStatusFlag)
 		resp := &pb.UpdateInstanceStatusResponse{
 			Response: pb.CreateResponseWithSCErr(err),
 		}
@@ -662,7 +679,7 @@ func (s *InstanceService) UpdateStatus(ctx context.Context, in *pb.UpdateInstanc
 		return resp, nil
 	}
 
-	log.Infof("update instance status successful: %s.", updateStatusFlag)
+	log.Infof("update instance[%s] status successfully", updateStatusFlag)
 	return &pb.UpdateInstanceStatusResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service instance status successfully."),
 	}, nil
@@ -672,7 +689,7 @@ func (s *InstanceService) UpdateInstanceProperties(ctx context.Context, in *pb.U
 	domainProject := util.ParseDomainProject(ctx)
 	instanceFlag := util.StringJoin([]string{in.ServiceId, in.InstanceId}, "/")
 	if err := Validate(in); err != nil {
-		log.Errorf(nil, "update instance status failed, %s.", instanceFlag)
+		log.Errorf(nil, "update instance[%s] properties failed", instanceFlag)
 		return &pb.UpdateInstancePropsResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -680,13 +697,13 @@ func (s *InstanceService) UpdateInstanceProperties(ctx context.Context, in *pb.U
 
 	instance, err := serviceUtil.GetInstance(ctx, domainProject, in.ServiceId, in.InstanceId)
 	if err != nil {
-		log.Errorf(err, "update instance properties failed, %s: get instance from etcd failed.", instanceFlag)
+		log.Errorf(err, "update instance[%s] properties failed", instanceFlag)
 		return &pb.UpdateInstancePropsResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if instance == nil {
-		log.Errorf(nil, "update instance properties failed, %s: instance not exist.", instanceFlag)
+		log.Errorf(nil, "update instance[%s] properties failed, instance does not exist", instanceFlag)
 		return &pb.UpdateInstancePropsResponse{
 			Response: pb.CreateResponse(scerr.ErrInstanceNotExists, "Service instance does not exist."),
 		}, nil
@@ -696,7 +713,7 @@ func (s *InstanceService) UpdateInstanceProperties(ctx context.Context, in *pb.U
 	copyInstanceRef.Properties = in.Properties
 
 	if err := serviceUtil.UpdateInstance(ctx, domainProject, &copyInstanceRef); err != nil {
-		log.Errorf(err, "update instance properties failed, %s", instanceFlag)
+		log.Errorf(err, "update instance[%s] properties failed", instanceFlag)
 		resp := &pb.UpdateInstancePropsResponse{
 			Response: pb.CreateResponseWithSCErr(err),
 		}
@@ -706,7 +723,7 @@ func (s *InstanceService) UpdateInstanceProperties(ctx context.Context, in *pb.U
 		return resp, nil
 	}
 
-	log.Infof("update instance properties successful: %s.", instanceFlag)
+	log.Infof("update instance[%s] properties successfully", instanceFlag)
 	return &pb.UpdateInstancePropsResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service instance properties successfully."),
 	}, nil
@@ -723,21 +740,24 @@ func (s *InstanceService) ClusterHealth(ctx context.Context) (*pb.GetInstancesRe
 	})
 
 	if err != nil {
-		log.Errorf(err, "health check failed: get service center serviceId failed.")
+		log.Errorf(err, "health check failed: get service center[%s/%s/%s/%s]'s serviceId failed",
+			apt.Service.Environment, apt.Service.AppId, apt.Service.ServiceName, apt.Service.Version)
 		return &pb.GetInstancesResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if len(serviceId) == 0 {
-		log.Errorf(nil, "health check failed: get service center serviceId not exist.")
+		log.Errorf(nil, "health check failed: service center[%s/%s/%s/%s]'s serviceId does not exist",
+			apt.Service.Environment, apt.Service.AppId, apt.Service.ServiceName, apt.Service.Version)
 		return &pb.GetInstancesResponse{
-			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service center serviceId not exist."),
+			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "ServiceCenter's serviceId not exist."),
 		}, nil
 	}
 
 	instances, err := serviceUtil.GetAllInstancesOfOneService(ctx, domainProject, serviceId)
 	if err != nil {
-		log.Errorf(err, "health check failed: get service center instances failed.")
+		log.Errorf(err, "health check failed: get service center[%s][%s/%s/%s/%s]'s instances failed",
+			serviceId, apt.Service.Environment, apt.Service.AppId, apt.Service.ServiceName, apt.Service.Version)
 		return &pb.GetInstancesResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
diff --git a/server/service/instance_test.go b/server/service/instance_test.go
index dd5de495..23f6abe2 100644
--- a/server/service/instance_test.go
+++ b/server/service/instance_test.go
@@ -1186,6 +1186,17 @@ var _ = Describe("'Instance' service", func() {
 				Expect(len(respFind.Instances)).To(Equal(1))
 				Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId4))
 
+				respFind, err = instanceResource.Find(getContext(), &pb.FindInstancesRequest{
+					Environment: pb.ENV_PROD,
+					AppId:       "query_instance",
+					ServiceName: "query_instance_diff_env_service",
+					VersionRule: "1.0.0",
+				})
+				Expect(err).To(BeNil())
+				Expect(respFind.Response.Code).To(Equal(pb.Response_SUCCESS))
+				Expect(len(respFind.Instances)).To(Equal(1))
+				Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId4))
+
 				By("find with rev")
 				ctx := util.SetContext(getContext(), serviceUtil.CTX_NOCACHE, "")
 				respFind, err = instanceResource.Find(ctx, &pb.FindInstancesRequest{
diff --git a/server/service/instance_validator.go b/server/service/instance_validator.go
index 1777b402..0a7346cf 100644
--- a/server/service/instance_validator.go
+++ b/server/service/instance_validator.go
@@ -52,6 +52,7 @@ func FindInstanceReqValidator() *validate.Validator {
 		v.AddRules(ExistenceReqValidator().GetRules())
 		v.AddRule("VersionRule", ExistenceReqValidator().GetRule("Version"))
 		v.AddRule("Tags", UpdateTagReqValidator().GetRule("Key"))
+		v.AddRule("Environment", MicroServiceKeyValidator().GetRule("Environment"))
 	})
 }
 
diff --git a/server/service/microservice.go b/server/service/microservice.go
index b0b36e14..abf5006c 100644
--- a/server/service/microservice.go
+++ b/server/service/microservice.go
@@ -49,9 +49,9 @@ const (
 
 func (s *MicroServiceService) Create(ctx context.Context, in *pb.CreateServiceRequest) (*pb.CreateServiceResponse, error) {
 	if in == nil || in.Service == nil {
-		log.Errorf(nil, "create micro-service failed : param empty.")
+		log.Errorf(nil, "create micro-service failed: request body is empty")
 		return &pb.CreateServiceResponse{
-			Response: pb.CreateResponse(scerr.ErrInvalidParams, "request format invalid"),
+			Response: pb.CreateResponse(scerr.ErrInvalidParams, "Request body is empty"),
 		}, nil
 	}
 
@@ -79,7 +79,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "create micro-service failed, %s: invalid parameters. operator: %s",
+		log.Errorf(err, "create micro-service[%s] failed, operator: %s",
 			serviceFlag, remoteIP)
 		return &pb.CreateServiceResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
@@ -100,7 +100,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 	defer reporter.Close(ctx)
 
 	if reporter != nil && reporter.Err != nil {
-		log.Errorf(reporter.Err, "create micro-service failed, %s: check service failed before create. operator: %s",
+		log.Errorf(reporter.Err, "create micro-service[%s] failed, operator: %s",
 			serviceFlag, remoteIP)
 		resp := &pb.CreateServiceResponse{
 			Response: pb.CreateResponseWithSCErr(reporter.Err),
@@ -124,7 +124,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 
 	data, err := json.Marshal(service)
 	if err != nil {
-		log.Errorf(err, "create micro-service failed, %s: json marshal service failed. operator: %s",
+		log.Errorf(err, "create micro-service[%s] failed, json marshal service failed, operator: %s",
 			serviceFlag, remoteIP)
 		return &pb.CreateServiceResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
@@ -157,7 +157,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 
 	resp, err := backend.Registry().TxnWithCmp(ctx, opts, uniqueCmpOpts, failOpts)
 	if err != nil {
-		log.Errorf(err, "create micro-service failed, %s: commit data into etcd failed. operator: %s",
+		log.Errorf(err, "create micro-service[%s] failed, operator: %s",
 			serviceFlag, remoteIP)
 		return &pb.CreateServiceResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()),
@@ -167,7 +167,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 		if len(requestServiceId) != 0 {
 			if len(resp.Kvs) == 0 ||
 				requestServiceId != util.BytesToStringWithNoCopy(resp.Kvs[0].Value) {
-				log.Warnf("create micro-service failed, %s: service already exists. operator: %s",
+				log.Warnf("create micro-service[%s] failed, service already exists, operator: %s",
 					serviceFlag, remoteIP)
 				return &pb.CreateServiceResponse{
 					Response: pb.CreateResponse(scerr.ErrServiceAlreadyExists,
@@ -178,7 +178,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 
 		if len(resp.Kvs) == 0 {
 			// internal error?
-			log.Errorf(nil, "create micro-service failed, %s: unexpected txn response. operator: %s",
+			log.Errorf(nil, "create micro-service[%s] failed, unexpected txn response, operator: %s",
 				serviceFlag, remoteIP)
 			return &pb.CreateServiceResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, "Unexpected txn response."),
@@ -186,7 +186,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 		}
 
 		serviceIdInner := util.BytesToStringWithNoCopy(resp.Kvs[0].Value)
-		log.Warnf("create micro-service failed, serviceId = %s , flag = %s: service already exists. operator: %s",
+		log.Warnf("create micro-service[%s][%s] failed, service already exists, operator: %s",
 			serviceIdInner, serviceFlag, remoteIP)
 		return &pb.CreateServiceResponse{
 			Response:  pb.CreateResponse(pb.Response_SUCCESS, "register service successfully"),
@@ -195,11 +195,11 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 	}
 
 	if err := reporter.ReportUsedQuota(ctx); err != nil {
-		log.Errorf(err, "report used quota failed.")
+		log.Errorf(err, "report the used quota failed")
 	}
 
-	log.Infof("create micro-service %s, serviceId: %s. operator: %s",
-		serviceFlag, service.ServiceId, remoteIP)
+	log.Infof("create micro-service[%s][%s] successfully, operator: %s",
+		service.ServiceId, serviceFlag, remoteIP)
 	return &pb.CreateServiceResponse{
 		Response:  pb.CreateResponse(pb.Response_SUCCESS, "Register service successfully."),
 		ServiceId: service.ServiceId,
@@ -208,7 +208,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 
 func checkQuota(ctx context.Context, domainProject string) *quota.ApplyQuotaResult {
 	if core.IsSCInstance(ctx) {
-		log.Debugf("service-center self register")
+		log.Debugf("register service-center, skip quota check")
 		return nil
 	}
 	res := quota.NewApplyQuotaResource(quota.MicroServiceQuotaType, domainProject, "", 1)
@@ -217,6 +217,7 @@ func checkQuota(ctx context.Context, domainProject string) *quota.ApplyQuotaResu
 }
 
 func (s *MicroServiceService) DeleteServicePri(ctx context.Context, serviceId string, force bool) (*pb.Response, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	domainProject := util.ParseDomainProject(ctx)
 
 	title := "delete"
@@ -226,18 +227,20 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, serviceId st
 
 	if serviceId == apt.Service.ServiceId {
 		err := errors.New("not allow to delete service center")
-		log.Errorf(err, "%s micro-service failed, serviceId is %s", title, serviceId)
+		log.Errorf(err, "%s micro-service[%s] failed, operator: %s", title, serviceId, remoteIP)
 		return pb.CreateResponse(scerr.ErrInvalidParams, err.Error()), nil
 	}
 
 	service, err := serviceUtil.GetService(ctx, domainProject, serviceId)
 	if err != nil {
-		log.Errorf(err, "%s micro-service failed, serviceId is %s: get service failed.", title, serviceId)
+		log.Errorf(err, "%s micro-service[%s] failed, get service file failed, operator: %s",
+			title, serviceId, remoteIP)
 		return pb.CreateResponse(scerr.ErrInternal, err.Error()), err
 	}
 
 	if service == nil {
-		log.Errorf(err, "%s micro-service failed, serviceId is %s: service not exist.", title, serviceId)
+		log.Errorf(err, "%s micro-service[%s] failed, service does not exist, operator: %s",
+			title, serviceId, remoteIP)
 		return pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."), nil
 	}
 
@@ -246,11 +249,13 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, serviceId st
 		dr := serviceUtil.NewProviderDependencyRelation(ctx, domainProject, service)
 		services, err := dr.GetDependencyConsumerIds()
 		if err != nil {
-			log.Errorf(err, "delete micro-service failed, serviceId is %s: inner err, get service dependency failed.", serviceId)
+			log.Errorf(err, "delete micro-service[%s] failed, get service dependency failed, operator: %s",
+				serviceId, remoteIP)
 			return pb.CreateResponse(scerr.ErrInternal, err.Error()), err
 		}
-		if len(services) > 1 || (len(services) == 1 && services[0] != serviceId) {
-			log.Errorf(nil, "delete micro-service failed, serviceId is %s: can't delete, other services rely it.", serviceId)
+		if l := len(services); l > 1 || (l == 1 && services[0] != serviceId) {
+			log.Errorf(nil, "delete micro-service[%s] failed, other services[%d] depend on it, operator: %s",
+				serviceId, l, remoteIP)
 			return pb.CreateResponse(scerr.ErrDependedOnConsumer, "Can not delete this service, other service rely it."), err
 		}
 
@@ -260,13 +265,15 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, serviceId st
 			registry.WithPrefix(),
 			registry.WithCountOnly())
 		if err != nil {
-			log.Errorf(err, "delete micro-service failed, serviceId is %s: inner err, get instances failed.", serviceId)
+			log.Errorf(err, "delete micro-service[%s] failed, get instances failed, operator: %s",
+				serviceId, remoteIP)
 			return pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()), err
 		}
 
 		if rsp.Count > 0 {
-			log.Errorf(nil, "delete micro-service failed, serviceId is %s: can't delete, exist instance.", serviceId)
-			return pb.CreateResponse(scerr.ErrDeployedInstance, "Can not delete this service, exist instance."), err
+			log.Errorf(nil, "delete micro-service[%s] failed, service deployed instances[%s], operator: %s",
+				serviceId, rsp.Count, remoteIP)
+			return pb.CreateResponse(scerr.ErrDeployedInstance, "Can not delete the service deployed instance(s)."), err
 		}
 	}
 
@@ -288,7 +295,8 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, serviceId st
 	//删除依赖规则
 	optDeleteDep, err := serviceUtil.DeleteDependencyForDeleteService(domainProject, serviceId, serviceKey)
 	if err != nil {
-		log.Errorf(err, "%s micro-service failed, serviceId is %s: inner err, delete dependency failed.", title, serviceId)
+		log.Errorf(err, "%s micro-service[%s] failed, delete dependency failed, operator: %s",
+			title, serviceId, remoteIP)
 		return pb.CreateResponse(scerr.ErrInternal, err.Error()), err
 	}
 	opts = append(opts, optDeleteDep)
@@ -324,7 +332,8 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, serviceId st
 	//删除实例
 	err = serviceUtil.DeleteServiceAllInstances(ctx, serviceId)
 	if err != nil {
-		log.Errorf(err, "%s micro-service failed, serviceId is %s: delete all instances failed.", title, serviceId)
+		log.Errorf(err, "%s micro-service[%s] failed, revoke all instances failed, operator: %s",
+			title, serviceId, remoteIP)
 		return pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()), err
 	}
 
@@ -334,24 +343,26 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, serviceId st
 			registry.CMP_NOT_EQUAL, 0)},
 		nil)
 	if err != nil {
-		log.Errorf(err, "%s micro-service failed, serviceId is %s: commit data into etcd failed.", title, serviceId)
+		log.Errorf(err, "%s micro-service[%s] failed, operator: %s", title, serviceId, remoteIP)
 		return pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()), err
 	}
 	if !resp.Succeeded {
-		log.Errorf(err, "%s micro-service failed, serviceId is %s: service does noet exist.", title, serviceId)
+		log.Errorf(err, "%s micro-service[%s] failed, service does not exist, operator: %s",
+			title, serviceId, remoteIP)
 		return pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."), nil
 	}
 
 	serviceUtil.RemandServiceQuota(ctx)
 
-	log.Infof("%s micro-service successful: serviceId is %s, operator is %s.", title, serviceId, util.GetIPFromContext(ctx))
+	log.Infof("%s micro-service[%s] successfully, operator: %s", title, serviceId, remoteIP)
 	return pb.CreateResponse(pb.Response_SUCCESS, "Unregister service successfully."), nil
 }
 
 func (s *MicroServiceService) Delete(ctx context.Context, in *pb.DeleteServiceRequest) (*pb.DeleteServiceResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "delete micro-service failed, serviceId is %s: invalid parameters.", in.ServiceId)
+		log.Errorf(err, "delete micro-service[%s] failed, operator: %s", in.ServiceId, remoteIP)
 		return &pb.DeleteServiceResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -365,10 +376,12 @@ func (s *MicroServiceService) Delete(ctx context.Context, in *pb.DeleteServiceRe
 }
 
 func (s *MicroServiceService) DeleteServices(ctx context.Context, request *pb.DelServicesRequest) (*pb.DelServicesResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	// 合法性检查
 	if len(request.ServiceIds) == 0 {
+		log.Errorf(nil, "delete all micro-services failed, 'serviceIds' is empty, operator: %s", remoteIP)
 		return &pb.DelServicesResponse{
-			Response: pb.CreateResponse(scerr.ErrInvalidParams, "Invalid request param."),
+			Response: pb.CreateResponse(scerr.ErrInvalidParams, "'serviceIds' is empty"),
 			Services: nil,
 		}, nil
 	}
@@ -380,7 +393,7 @@ func (s *MicroServiceService) DeleteServices(ctx context.Context, request *pb.De
 	for _, serviceId := range request.ServiceIds {
 		//ServiceId重复性检查
 		if _, ok := existFlag[serviceId]; ok {
-			log.Warnf("delete micro-service %s , multiple.", serviceId)
+			log.Warnf("duplicate micro-service[%s] serviceId, operator: %s", serviceId, remoteIP)
 			continue
 		} else {
 			existFlag[serviceId] = true
@@ -394,7 +407,7 @@ func (s *MicroServiceService) DeleteServices(ctx context.Context, request *pb.De
 		}
 		err := Validate(in)
 		if err != nil {
-			log.Errorf(err, "delete micro-service failed, serviceId is %s: invalid parameters.", in.ServiceId)
+			log.Errorf(err, "delete micro-service[%s] failed, operator: %s", in.ServiceId, remoteIP)
 			serviceRespChan <- &pb.DelServicesRspInfo{
 				ServiceId:  serviceId,
 				ErrMessage: err.Error(),
@@ -422,7 +435,8 @@ func (s *MicroServiceService) DeleteServices(ctx context.Context, request *pb.De
 		}
 	}
 
-	log.Infof("Batch DeleteServices, count is %d, serviceId = %v , result = %d, ", len(request.ServiceIds), request.ServiceIds, responseCode)
+	log.Infof("Batch delete micro-services by serviceIds[%d]: %v, result code: %d, operator: %s",
+		len(request.ServiceIds), request.ServiceIds, responseCode, remoteIP)
 
 	resp := &pb.DelServicesResponse{
 		Services: delServiceRspInfo,
@@ -455,8 +469,7 @@ func (s *MicroServiceService) getDeleteServiceFunc(ctx context.Context, serviceI
 func (s *MicroServiceService) GetOne(ctx context.Context, in *pb.GetServiceRequest) (*pb.GetServiceResponse, error) {
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "get micro-service failed, serviceId is %s: invalid parameters.",
-			in.ServiceId)
+		log.Errorf(err, "get micro-service[%s] failed", in.ServiceId)
 		return &pb.GetServiceResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -465,19 +478,19 @@ func (s *MicroServiceService) GetOne(ctx context.Context, in *pb.GetServiceReque
 	service, err := serviceUtil.GetService(ctx, domainProject, in.ServiceId)
 
 	if err != nil {
-		log.Errorf(err, "get micro-service failed, serviceId is %s: inner err, get service failed.", in.ServiceId)
+		log.Errorf(err, "get micro-service[%s] failed, get service file failed", in.ServiceId)
 		return &pb.GetServiceResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if service == nil {
-		log.Errorf(nil, "get micro-service failed, serviceId is %s: service not exist.", in.ServiceId)
+		log.Errorf(nil, "get micro-service[%s] failed, service does not exist", in.ServiceId)
 		return &pb.GetServiceResponse{
-			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "service does not exist."),
+			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 	return &pb.GetServiceResponse{
-		Response: pb.CreateResponse(pb.Response_SUCCESS, "get service successfully."),
+		Response: pb.CreateResponse(pb.Response_SUCCESS, "Get service successfully."),
 		Service:  service,
 	}, nil
 }
@@ -485,22 +498,23 @@ func (s *MicroServiceService) GetOne(ctx context.Context, in *pb.GetServiceReque
 func (s *MicroServiceService) GetServices(ctx context.Context, in *pb.GetServicesRequest) (*pb.GetServicesResponse, error) {
 	services, err := serviceUtil.GetAllServiceUtil(ctx)
 	if err != nil {
-		log.Errorf(err, "get services failed: inner err.")
+		log.Errorf(err, "get all services by domain failed")
 		return &pb.GetServicesResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 
 	return &pb.GetServicesResponse{
-		Response: pb.CreateResponse(pb.Response_SUCCESS, "get services successfully."),
+		Response: pb.CreateResponse(pb.Response_SUCCESS, "Get all services successfully."),
 		Services: services,
 	}, nil
 }
 
 func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.UpdateServicePropsRequest) (*pb.UpdateServicePropsResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "update service properties failed, serviceId is %s: invalid parameters.", in.ServiceId)
+		log.Errorf(err, "update service[%s] properties failed, operator: %s", in.ServiceId, remoteIP)
 		return &pb.UpdateServicePropsResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -511,15 +525,17 @@ func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.Updat
 	key := apt.GenerateServiceKey(domainProject, in.ServiceId)
 	service, err := serviceUtil.GetService(ctx, domainProject, in.ServiceId)
 	if err != nil {
-		log.Errorf(err, "update service properties failed, serviceId is %s: query service failed.", in.ServiceId)
+		log.Errorf(err, "update service[%s] properties failed, get service file failed, operator: %s",
+			in.ServiceId, remoteIP)
 		return &pb.UpdateServicePropsResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if service == nil {
-		log.Errorf(nil, "update service properties failed, serviceId is %s: service not exist.", in.ServiceId)
+		log.Errorf(nil, "update service[%s] properties failed, service does not exist, operator: %s",
+			in.ServiceId, remoteIP)
 		return &pb.UpdateServicePropsResponse{
-			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "service does not exist."),
+			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 
@@ -529,7 +545,8 @@ func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.Updat
 
 	data, err := json.Marshal(copyServiceRef)
 	if err != nil {
-		log.Errorf(err, "update service properties failed, serviceId is %s: json marshal service failed.", in.ServiceId)
+		log.Errorf(err, "update service[%s] properties failed, json marshal service failed, operator: %s",
+			in.ServiceId, remoteIP)
 		return &pb.UpdateServicePropsResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -543,19 +560,20 @@ func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.Updat
 			registry.CMP_NOT_EQUAL, 0)},
 		nil)
 	if err != nil {
-		log.Errorf(err, "update service properties failed, serviceId is %s: commit data into etcd failed.", in.ServiceId)
+		log.Errorf(err, "update service[%s] properties failed, operator: %s", in.ServiceId, remoteIP)
 		return &pb.UpdateServicePropsResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()),
 		}, err
 	}
 	if !resp.Succeeded {
-		log.Errorf(err, "update service properties failed, serviceId is %s: service does not exist.", in.ServiceId)
+		log.Errorf(err, "update service[%s] properties failed, service does not exist, operator: %s",
+			in.ServiceId, remoteIP)
 		return &pb.UpdateServicePropsResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 
-	log.Infof("update service properties successful: serviceId is %s.", in.ServiceId)
+	log.Infof("update service[%s] properties successfully, operator: %s", in.ServiceId, remoteIP)
 	return &pb.UpdateServicePropsResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "update service successfully."),
 	}, nil
@@ -566,9 +584,9 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
 	switch in.Type {
 	case EXIST_TYPE_MICROSERVICE:
 		err := ExistenceReqValidator().Validate(in)
-		serviceFlag := util.StringJoin([]string{in.AppId, in.ServiceName, in.Version}, "/")
+		serviceFlag := util.StringJoin([]string{in.Environment, in.AppId, in.ServiceName, in.Version}, "/")
 		if err != nil {
-			log.Errorf(err, "micro-service exist failed, service %s: invalid params.", serviceFlag)
+			log.Errorf(err, "micro-service[%s] exist failed", serviceFlag)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 			}, nil
@@ -583,19 +601,19 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
 			Tenant:      domainProject,
 		})
 		if err != nil {
-			log.Errorf(err, "micro-service exist failed, find %s serviceIds failed.", serviceFlag)
+			log.Errorf(err, "micro-service[%s] exist failed, find serviceIds failed", serviceFlag)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 			}, err
 		}
 		if !exist {
-			log.Infof("micro-service exist failed, service %s does not exist.", serviceFlag)
+			log.Infof("micro-service[%s] exist failed, service does not exist", serviceFlag)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrServiceNotExists, serviceFlag+" does not exist."),
 			}, nil
 		}
 		if len(ids) == 0 {
-			log.Infof("micro-service exist failed, %s version mismatch.", serviceFlag)
+			log.Infof("micro-service[%s] exist failed, version mismatch", serviceFlag)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrServiceVersionNotExists, serviceFlag+" version mismatch."),
 			}, nil
@@ -607,14 +625,14 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
 	case EXIST_TYPE_SCHEMA:
 		err := GetSchemaReqValidator().Validate(in)
 		if err != nil {
-			log.Errorf(err, "schema exist failed, serviceId %s, schemaId %s: invalid params.", in.ServiceId, in.SchemaId)
+			log.Errorf(err, "schema[%s/%s] exist failed", in.ServiceId, in.SchemaId)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 			}, nil
 		}
 
 		if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-			log.Warnf("schema exist failed, serviceId %s, schemaId %s: service not exist.", in.ServiceId, in.SchemaId)
+			log.Warnf("schema[%s/%s] exist failed, service does not exist", in.ServiceId, in.SchemaId)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrServiceNotExists, "service does not exist."),
 			}, nil
@@ -623,20 +641,20 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
 		key := apt.GenerateServiceSchemaKey(domainProject, in.ServiceId, in.SchemaId)
 		exist, err := serviceUtil.CheckSchemaInfoExist(ctx, key)
 		if err != nil {
-			log.Errorf(err, "schema exist failed, serviceId %s, schemaId %s: get schema failed.", in.ServiceId, in.SchemaId)
+			log.Errorf(err, "schema[%s/%s] exist failed, get schema failed", in.ServiceId, in.SchemaId)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 			}, err
 		}
 		if !exist {
-			log.Infof("schema exist failed, serviceId %s, schemaId %s: schema not exist.", in.ServiceId, in.SchemaId)
+			log.Infof("schema[%s/%s] exist failed, schema does not exist", in.ServiceId, in.SchemaId)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrSchemaNotExists, "schema does not exist."),
 			}, nil
 		}
 		schemaSummary, err := getSchemaSummary(ctx, domainProject, in.ServiceId, in.SchemaId)
 		if err != nil {
-			log.Errorf(err, "schema exist failed, serviceId %s, schemaId %s: get schema summary failed.", in.ServiceId, in.SchemaId)
+			log.Errorf(err, "schema[%s/%s] exist failed, get schema summary failed", in.ServiceId, in.SchemaId)
 			return &pb.GetExistenceResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 			}, err
@@ -647,7 +665,7 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
 			Summary:  schemaSummary,
 		}, nil
 	default:
-		log.Warnf("unexpected type '%s' for query.", in.Type)
+		log.Warnf("unexpected type '%s' for existence query.", in.Type)
 		return &pb.GetExistenceResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, "Only micro-service and schema can be used as type."),
 		}, nil
@@ -738,18 +756,13 @@ func (s *MicroServiceService) CreateServiceEx(ctx context.Context, in *pb.Create
 
 	if len(errMessages) != 0 {
 		result.Response.Code = scerr.ErrInvalidParams
-		errMessage, err := json.Marshal(errMessages)
-		if err != nil {
-			result.Response.Message = "marshal errMessages error"
-			log.Error("marshal errMessages error", err)
-			return result, nil
-		}
-		result.Response.Message = fmt.Sprintf("errMessage : %s", string(errMessage))
+		result.Response.Message = fmt.Sprintf("errMessages: %v", errMessages)
 	} else {
 		result.Response.Code = pb.Response_SUCCESS
 	}
 
-	log.Infof("createServiceEx, serviceId = %s, result = %s ", result.ServiceId, result.Response.Message)
+	log.Infof("createServiceEx, serviceId: %s, result code: %s, operator: %s",
+		result.ServiceId, result.Response.Message, util.GetIPFromContext(ctx))
 	return result, nil
 }
 
diff --git a/server/service/notification/notification_healthchecker.go b/server/service/notification/notification_healthchecker.go
index ddd84af8..5b551d10 100644
--- a/server/service/notification/notification_healthchecker.go
+++ b/server/service/notification/notification_healthchecker.go
@@ -38,7 +38,7 @@ func (s *NotifyServiceHealthChecker) OnMessage(job NotifyJob) {
 	err := j.ErrorSubscriber.Err()
 
 	if j.ErrorSubscriber.Type() == NOTIFTY {
-		log.Errorf(nil, "remove %s watcher %s %s failed, here cause a dead lock",
+		log.Errorf(nil, "remove %s watcher failed, here cause a dead lock, subject: %s, group: %s",
 			j.ErrorSubscriber.Type(), j.ErrorSubscriber.Subject(), j.ErrorSubscriber.Group())
 		return
 	}
diff --git a/server/service/rule.go b/server/service/rule.go
index bde2a542..952ff63c 100644
--- a/server/service/rule.go
+++ b/server/service/rule.go
@@ -34,9 +34,10 @@ import (
 )
 
 func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRulesRequest) (*pb.AddServiceRulesResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "add rule failed, serviceId is %s.", in.ServiceId)
+		log.Errorf(err, "add service[%s] rule failed, operator: %s", in.ServiceId, remoteIP)
 		return &pb.AddServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -46,7 +47,8 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
 
 	// service id存在性校验
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(nil, "add rule failed, serviceId is %s: service not exist.", in.ServiceId)
+		log.Errorf(nil, "add service[%s] rule failed, service does not exist, operator: %s",
+			in.ServiceId, remoteIP)
 		return &pb.AddServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, "Service does not exist."),
 		}, nil
@@ -55,7 +57,7 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
 	rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
 	errQuota := rst.Err
 	if errQuota != nil {
-		log.Errorf(errQuota, "")
+		log.Errorf(errQuota, "add service[%s] rule failed, operator: %s", in.ServiceId, remoteIP)
 		response := &pb.AddServiceRulesResponse{
 			Response: pb.CreateResponseWithSCErr(errQuota),
 		}
@@ -77,18 +79,19 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
 		//黑白名单只能存在一种,黑名单 or 白名单
 		if len(ruleType) == 0 {
 			ruleType = rule.RuleType
-		} else {
-			if ruleType != rule.RuleType {
-				log.Errorf(nil, "add rule failed, serviceId is %s:can only exist one type, BLACK or WHITE.", in.ServiceId)
-				return &pb.AddServiceRulesResponse{
-					Response: pb.CreateResponse(scerr.ErrBlackAndWhiteRule, "Service can only contain one rule type, BLACK or WHITE."),
-				}, nil
-			}
+		} else if ruleType != rule.RuleType {
+			log.Errorf(nil, "add service[%s] rule failed, can not add different RuleType at the same time, operator: %s",
+				in.ServiceId, remoteIP)
+			return &pb.AddServiceRulesResponse{
+				Response: pb.CreateResponse(scerr.ErrBlackAndWhiteRule, "Service can only contain one rule type, BLACK or WHITE."),
+			}, nil
+
 		}
 
 		//同一服务,attribute和pattern确定一个rule
 		if serviceUtil.RuleExist(ctx, domainProject, in.ServiceId, rule.Attribute, rule.Pattern) {
-			log.Infof("This rule more exists, %s ", in.ServiceId)
+			log.Infof("service[%s] rule[%s/%s] already exists, operator: %s",
+				in.ServiceId, rule.Attribute, rule.Pattern, remoteIP)
 			continue
 		}
 
@@ -110,7 +113,8 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
 
 		data, err := json.Marshal(ruleAdd)
 		if err != nil {
-			log.Errorf(err, "add rule failed, serviceId is %s: marshal rule failed.", in.ServiceId)
+			log.Errorf(err, "add service[%s] rule failed, marshal rule[%s/%s] failed, operator: %s",
+				in.ServiceId, ruleAdd.Attribute, ruleAdd.Pattern, remoteIP)
 			return &pb.AddServiceRulesResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 			}, err
@@ -120,7 +124,8 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
 		opts = append(opts, registry.OpPut(registry.WithStrKey(indexKey), registry.WithStrValue(ruleAdd.RuleId)))
 	}
 	if len(opts) <= 0 {
-		log.Infof("add rule successful, serviceId is %s: rule already exists, no rules to add.", in.ServiceId)
+		log.Infof("add service[%s] rule successfully, no rules to add, operator: %s",
+			in.ServiceId, remoteIP)
 		return &pb.AddServiceRulesResponse{
 			Response: pb.CreateResponse(pb.Response_SUCCESS, "Service rules has been added."),
 		}, nil
@@ -132,19 +137,20 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
 			registry.CMP_NOT_EQUAL, 0)},
 		nil)
 	if err != nil {
-		log.Errorf(err, "add rule failed, serviceId is %s: commit data into etcd failed.", in.ServiceId)
+		log.Errorf(err, "add service[%s] rule failed, operator: %s", in.ServiceId, remoteIP)
 		return &pb.AddServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()),
 		}, err
 	}
 	if !resp.Succeeded {
-		log.Errorf(nil, "add rule failed, serviceId is %s: service does not exist.", in.ServiceId)
+		log.Errorf(nil, "add service[%s] rule failed, service does not exist, operator: %s",
+			in.ServiceId, remoteIP)
 		return &pb.AddServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 
-	log.Infof("add rule successful, serviceId %s, ruleIds %v.", in.ServiceId, ruleIds)
+	log.Infof("add service[%s] rule %v successfully, operator: %s", in.ServiceId, ruleIds, remoteIP)
 	return &pb.AddServiceRulesResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Add service rules successfully."),
 		RuleIds:  ruleIds,
@@ -152,9 +158,10 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
 }
 
 func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServiceRuleRequest) (*pb.UpdateServiceRuleResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "update rule failed, serviceId is %s, ruleId is %s.", in.ServiceId, in.RuleId)
+		log.Errorf(err, "update service rule[%s/%s] failed, operator: %s", in.ServiceId, in.RuleId, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -164,7 +171,8 @@ func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServi
 
 	// service id存在性校验
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(nil, "update rule failed, serviceId is %s, ruleId is %s: service not exist.", in.ServiceId, in.RuleId)
+		log.Errorf(nil, "update service rule[%s/%s] failed, service does not exist, operator: %s",
+			in.ServiceId, in.RuleId, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -173,13 +181,15 @@ func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServi
 	//是否能改变ruleType
 	ruleType, ruleNum, err := serviceUtil.GetServiceRuleType(ctx, domainProject, in.ServiceId)
 	if err != nil {
-		log.Errorf(err, "update rule failed, serviceId is %s, ruleId is %s: get rule type failed.", in.ServiceId, in.RuleId)
+		log.Errorf(err, "update service rule[%s/%s] failed, get rule type failed, operator: %s",
+			in.ServiceId, in.RuleId, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if ruleNum >= 1 && ruleType != in.Rule.RuleType {
-		log.Errorf(err, "update rule failed, serviceId is %s, ruleId is %s: rule type can exist one type, BLACK or WHITE.rule type is %s", in.ServiceId, in.RuleId, in.Rule.RuleType)
+		log.Errorf(err, "update service rule[%s/%s] failed, can only exist one type, current type is %s, operator: %s",
+			in.ServiceId, in.RuleId, ruleType, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrModifyRuleNotAllow, "Exist multiple rules,can not change rule type. Rule type is "+ruleType),
 		}, nil
@@ -187,13 +197,15 @@ func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServi
 
 	rule, err := serviceUtil.GetOneRule(ctx, domainProject, in.ServiceId, in.RuleId)
 	if err != nil {
-		log.Errorf(err, "update rule failed, serviceId is %s, ruleId is %s: query service rule failed.", in.ServiceId, in.RuleId)
+		log.Errorf(err, "update service rule[%s/%s] failed, query service rule failed, operator: %s",
+			in.ServiceId, in.RuleId, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if rule == nil {
-		log.Errorf(err, "update rule failed, serviceId is %s, ruleId is %s:this rule does not exist,can't update.", in.ServiceId, in.RuleId)
+		log.Errorf(err, "update service rule[%s/%s] failed, service rule does not exist, operator: %s",
+			in.ServiceId, in.RuleId, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrRuleNotExists, "This rule does not exist."),
 		}, nil
@@ -218,12 +230,13 @@ func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServi
 	key := apt.GenerateServiceRuleKey(domainProject, in.ServiceId, in.RuleId)
 	data, err := json.Marshal(copyRuleRef)
 	if err != nil {
-		log.Errorf(err, "update rule failed, serviceId is %s, ruleId is %s: marshal service rule failed.", in.ServiceId, in.RuleId)
+		log.Errorf(err, "update service rule[%s/%s] failed, marshal service rule failed, operator: %s",
+			in.ServiceId, in.RuleId, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
-	opts := []registry.PluginOp{}
+	var opts []registry.PluginOp
 	if isChangeIndex {
 		//加入新的rule index
 		indexKey := apt.GenerateRuleIndexKey(domainProject, in.ServiceId, copyRuleRef.Attribute, copyRuleRef.Pattern)
@@ -241,19 +254,20 @@ func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServi
 			registry.CMP_NOT_EQUAL, 0)},
 		nil)
 	if err != nil {
-		log.Errorf(err, "update rule failed, serviceId is %s, ruleId is %s: commit data into etcd failed.", in.ServiceId, in.RuleId)
+		log.Errorf(err, "update service rule[%s/%s] failed, operator: %s", in.ServiceId, in.RuleId, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()),
 		}, err
 	}
 	if !resp.Succeeded {
-		log.Errorf(err, "update rule failed, serviceId is %s, ruleId is %s: service does not exist.", in.ServiceId, in.RuleId)
+		log.Errorf(err, "update service rule[%s/%s] failed, service does not exist, operator: %s",
+			in.ServiceId, in.RuleId, remoteIP)
 		return &pb.UpdateServiceRuleResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 
-	log.Infof("update rule successful: servieId is %s, ruleId is %s.", in.ServiceId, in.RuleId)
+	log.Infof("update service rule[%s/%s] successfully, operator: %s", in.ServiceId, in.RuleId, remoteIP)
 	return &pb.UpdateServiceRuleResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Get service rules successfully."),
 	}, nil
@@ -262,7 +276,7 @@ func (s *MicroServiceService) UpdateRule(ctx context.Context, in *pb.UpdateServi
 func (s *MicroServiceService) GetRule(ctx context.Context, in *pb.GetServiceRulesRequest) (*pb.GetServiceRulesResponse, error) {
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "get service rule failed, serviceId %s.", in.ServiceId)
+		log.Errorf(err, "get service[%s] rule failed", in.ServiceId)
 		return &pb.GetServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -272,7 +286,7 @@ func (s *MicroServiceService) GetRule(ctx context.Context, in *pb.GetServiceRule
 
 	// service id存在性校验
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(nil, "get service rule failed, serviceId is %s: service not exist.", in.ServiceId)
+		log.Errorf(nil, "get service[%s] rule failed, service does not exist", in.ServiceId)
 		return &pb.GetServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -280,7 +294,7 @@ func (s *MicroServiceService) GetRule(ctx context.Context, in *pb.GetServiceRule
 
 	rules, err := serviceUtil.GetRulesUtil(ctx, domainProject, in.ServiceId)
 	if err != nil {
-		log.Errorf(err, "get service rule failed, serviceId is %s: get rule failed.", in.ServiceId)
+		log.Errorf(err, "get service[%s] rule failed", in.ServiceId)
 		return &pb.GetServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -293,9 +307,10 @@ func (s *MicroServiceService) GetRule(ctx context.Context, in *pb.GetServiceRule
 }
 
 func (s *MicroServiceService) DeleteRule(ctx context.Context, in *pb.DeleteServiceRulesRequest) (*pb.DeleteServiceRulesResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "delete rule failed, serviceId is %s, ruleIds are %s.", in.ServiceId, in.RuleIds)
+		log.Errorf(err, "delete service[%s] rules %v failed, operator: %s", in.ServiceId, in.RuleIds, remoteIP)
 		return &pb.DeleteServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -305,7 +320,8 @@ func (s *MicroServiceService) DeleteRule(ctx context.Context, in *pb.DeleteServi
 
 	// service id存在性校验
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(nil, "delete service rule failed, serviceId is %s, rule is %v: service does not exist.", in.ServiceId, in.RuleIds)
+		log.Errorf(nil, "delete service[%s] rules %v failed, service does not exist, operator: %s",
+			in.ServiceId, in.RuleIds, remoteIP)
 		return &pb.DeleteServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -319,13 +335,15 @@ func (s *MicroServiceService) DeleteRule(ctx context.Context, in *pb.DeleteServi
 		log.Debugf("start delete service rule file: %s", key)
 		data, err := serviceUtil.GetOneRule(ctx, domainProject, in.ServiceId, ruleId)
 		if err != nil {
-			log.Errorf(err, "delete service rule failed, serviceId is %s, rule is %v: get rule of ruleId %s failed.", in.ServiceId, in.RuleIds, ruleId)
+			log.Errorf(err, "delete service[%s] rules %v failed, get rule[%s] failed, operator: %s",
+				in.ServiceId, in.RuleIds, ruleId, remoteIP)
 			return &pb.DeleteServiceRulesResponse{
 				Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 			}, err
 		}
 		if data == nil {
-			log.Errorf(nil, "delete service rule failed, serviceId is %s, rule is %v: ruleId %s not exist.", in.ServiceId, in.RuleIds, ruleId)
+			log.Errorf(nil, "delete service[%s] rules %v failed, rule[%s] does not exist, operator: %s",
+				in.ServiceId, in.RuleIds, ruleId, remoteIP)
 			return &pb.DeleteServiceRulesResponse{
 				Response: pb.CreateResponse(scerr.ErrRuleNotExists, "This rule does not exist."),
 			}, nil
@@ -336,7 +354,8 @@ func (s *MicroServiceService) DeleteRule(ctx context.Context, in *pb.DeleteServi
 			registry.OpDel(registry.WithStrKey(indexKey)))
 	}
 	if len(opts) <= 0 {
-		log.Errorf(nil, "delete service rule failed, serviceId is %s, rule is %v: rule has been deleted.", in.ServiceId, in.RuleIds)
+		log.Errorf(nil, "delete service[%s] rules %v failed, no rule has been deleted, operator: %s",
+			in.ServiceId, in.RuleIds, remoteIP)
 		return &pb.DeleteServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrRuleNotExists, "No service rule has been deleted."),
 		}, nil
@@ -348,19 +367,20 @@ func (s *MicroServiceService) DeleteRule(ctx context.Context, in *pb.DeleteServi
 			registry.CMP_NOT_EQUAL, 0)},
 		nil)
 	if err != nil {
-		log.Errorf(err, "delete service rule failed, serviceId is %s, rule is %v: commit data into etcd failed.", in.ServiceId, in.RuleIds)
+		log.Errorf(err, "delete service[%s] rules %v failed, operator: %s", in.ServiceId, in.RuleIds, remoteIP)
 		return &pb.DeleteServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()),
 		}, err
 	}
 	if !resp.Succeeded {
-		log.Errorf(err, "delete service rule failed, serviceId is %s, rule is %v: service does not exist.", in.ServiceId, in.RuleIds)
+		log.Errorf(err, "delete service[%s] rules %v failed, service does not exist, operator: %s",
+			in.ServiceId, in.RuleIds, remoteIP)
 		return &pb.DeleteServiceRulesResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 
-	log.Infof("delete rule successful: serviceId %s, ruleIds %v", in.ServiceId, in.RuleIds)
+	log.Infof("delete service[%s] rules %v successfully, operator: %s", in.ServiceId, in.RuleIds, remoteIP)
 	return &pb.DeleteServiceRulesResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Delete service rules successfully."),
 	}, nil
diff --git a/server/service/schema.go b/server/service/schema.go
index 02592b36..4b825e6d 100644
--- a/server/service/schema.go
+++ b/server/service/schema.go
@@ -36,7 +36,7 @@ import (
 func (s *MicroServiceService) GetSchemaInfo(ctx context.Context, in *pb.GetSchemaRequest) (*pb.GetSchemaResponse, error) {
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(nil, "get schema failed, serviceId %s, schemaId %s: invalid params.", in.ServiceId, in.SchemaId)
+		log.Errorf(nil, "get schema[%s/%s] failed", in.ServiceId, in.SchemaId)
 		return &pb.GetSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -45,7 +45,7 @@ func (s *MicroServiceService) GetSchemaInfo(ctx context.Context, in *pb.GetSchem
 	domainProject := util.ParseDomainProject(ctx)
 
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(nil, "get schema failed, serviceId %s, schemaId %s: service not exist.", in.ServiceId, in.SchemaId)
+		log.Errorf(nil, "get schema[%s/%s] failed, service does not exist", in.ServiceId, in.SchemaId)
 		return &pb.GetSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -55,13 +55,13 @@ func (s *MicroServiceService) GetSchemaInfo(ctx context.Context, in *pb.GetSchem
 	opts := append(serviceUtil.FromContext(ctx), registry.WithStrKey(key))
 	resp, errDo := backend.Store().Schema().Search(ctx, opts...)
 	if errDo != nil {
-		log.Errorf(errDo, "get schema failed, serviceId %s, schemaId %s: get schema info failed.", in.ServiceId, in.SchemaId)
+		log.Errorf(errDo, "get schema[%s/%s] failed", in.ServiceId, in.SchemaId)
 		return &pb.GetSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, errDo.Error()),
 		}, errDo
 	}
 	if resp.Count == 0 {
-		log.Errorf(errDo, "get schema failed, serviceId %s, schemaId %s: schema not exists.", in.ServiceId, in.SchemaId)
+		log.Errorf(errDo, "get schema[%s/%s] failed, schema does not exists", in.ServiceId, in.SchemaId)
 		return &pb.GetSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrSchemaNotExists, "Do not have this schema info."),
 		}, nil
@@ -69,7 +69,7 @@ func (s *MicroServiceService) GetSchemaInfo(ctx context.Context, in *pb.GetSchem
 
 	schemaSummary, err := getSchemaSummary(ctx, domainProject, in.ServiceId, in.SchemaId)
 	if err != nil {
-		log.Errorf(err, "get schema failed, serviceId %s, schemaId %s: get schema summary failed.", in.ServiceId, in.SchemaId)
+		log.Errorf(err, "get schema[%s/%s] failed, get schema summary failed", in.ServiceId, in.SchemaId)
 		return &pb.GetSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -85,7 +85,7 @@ func (s *MicroServiceService) GetSchemaInfo(ctx context.Context, in *pb.GetSchem
 func (s *MicroServiceService) GetAllSchemaInfo(ctx context.Context, in *pb.GetAllSchemaRequest) (*pb.GetAllSchemaResponse, error) {
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(nil, "get schema failed, serviceId %s: invalid params.", in.ServiceId)
+		log.Errorf(nil, "get service[%s] all schemas failed", in.ServiceId)
 		return &pb.GetAllSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -95,13 +95,13 @@ func (s *MicroServiceService) GetAllSchemaInfo(ctx context.Context, in *pb.GetAl
 
 	service, err := serviceUtil.GetService(ctx, domainProject, in.ServiceId)
 	if err != nil {
-		log.Errorf(err, "get all schemas failed: get service failed. %s", in.ServiceId)
+		log.Errorf(err, "get service[%s] all schemas failed, get service failed", in.ServiceId)
 		return &pb.GetAllSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if service == nil {
-		log.Errorf(nil, "get all schemas failed: service does not exist. %s", in.ServiceId)
+		log.Errorf(nil, "get service[%s] all schemas failed, service does not exist", in.ServiceId)
 		return &pb.GetAllSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -119,7 +119,7 @@ func (s *MicroServiceService) GetAllSchemaInfo(ctx context.Context, in *pb.GetAl
 	opts := append(serviceUtil.FromContext(ctx), registry.WithStrKey(key), registry.WithPrefix())
 	resp, errDo := backend.Store().SchemaSummary().Search(ctx, opts...)
 	if errDo != nil {
-		log.Errorf(errDo, "get schema failed, serviceId %s: get schema info failed.", in.ServiceId)
+		log.Errorf(errDo, "get service[%s] all schema summaries failed", in.ServiceId)
 		return &pb.GetAllSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, errDo.Error()),
 		}, errDo
@@ -131,7 +131,7 @@ func (s *MicroServiceService) GetAllSchemaInfo(ctx context.Context, in *pb.GetAl
 		opts := append(serviceUtil.FromContext(ctx), registry.WithStrKey(key), registry.WithPrefix())
 		respWithSchema, errDo = backend.Store().Schema().Search(ctx, opts...)
 		if errDo != nil {
-			log.Errorf(errDo, "get schema failed, serviceId %s: get schema info failed.", in.ServiceId)
+			log.Errorf(errDo, "get service[%s] all schemas failed", in.ServiceId)
 			return &pb.GetAllSchemaResponse{
 				Response: pb.CreateResponse(scerr.ErrUnavailableBackend, errDo.Error()),
 			}, errDo
@@ -166,9 +166,10 @@ func (s *MicroServiceService) GetAllSchemaInfo(ctx context.Context, in *pb.GetAl
 }
 
 func (s *MicroServiceService) DeleteSchema(ctx context.Context, in *pb.DeleteSchemaRequest) (*pb.DeleteSchemaResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "delete schema failed, serviceId %s, schemaId %s: invalid params.", in.ServiceId, in.SchemaId)
+		log.Errorf(err, "delete schema[%s/%s] failed, operator: %s", in.ServiceId, in.SchemaId, remoteIP)
 		return &pb.DeleteSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -176,7 +177,8 @@ func (s *MicroServiceService) DeleteSchema(ctx context.Context, in *pb.DeleteSch
 	domainProject := util.ParseDomainProject(ctx)
 
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(nil, "delete schema failed, serviceId %s, schemaId %s: service not exist.", in.ServiceId, in.SchemaId)
+		log.Errorf(nil, "delete schema[%s/%s] failed, service does not exist, operator: %s",
+			in.ServiceId, in.SchemaId, remoteIP)
 		return &pb.DeleteSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -185,13 +187,14 @@ func (s *MicroServiceService) DeleteSchema(ctx context.Context, in *pb.DeleteSch
 	key := apt.GenerateServiceSchemaKey(domainProject, in.ServiceId, in.SchemaId)
 	exist, err := serviceUtil.CheckSchemaInfoExist(ctx, key)
 	if err != nil {
-		log.Errorf(err, "delete schema failed, serviceId %s, schemaId %s: get schema failed.", in.ServiceId, in.SchemaId)
+		log.Errorf(err, "delete schema[%s/%s] failed, operator: %s", in.ServiceId, in.SchemaId, remoteIP)
 		return &pb.DeleteSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if !exist {
-		log.Errorf(nil, "delete schema failed, serviceId %s, schemaId %s: schema not exist.", in.ServiceId, in.SchemaId)
+		log.Errorf(nil, "delete schema[%s/%s] failed, schema does not exist, operator: %s",
+			in.ServiceId, in.SchemaId, remoteIP)
 		return &pb.DeleteSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrSchemaNotExists, "Schema info does not exist."),
 		}, nil
@@ -208,28 +211,30 @@ func (s *MicroServiceService) DeleteSchema(ctx context.Context, in *pb.DeleteSch
 			registry.CMP_NOT_EQUAL, 0)},
 		nil)
 	if errDo != nil {
-		log.Errorf(errDo, "delete schema failed, serviceId %s, schemaId %s: delete schema from etcd failed.", in.ServiceId, in.SchemaId)
+		log.Errorf(errDo, "delete schema[%s/%s] failed, operator: %s", in.ServiceId, in.SchemaId, remoteIP)
 		return &pb.DeleteSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, errDo.Error()),
 		}, errDo
 	}
 	if !resp.Succeeded {
-		log.Errorf(nil, "delete schema failed, serviceId %s, schemaId %s: service does not exist.", in.ServiceId, in.SchemaId)
+		log.Errorf(nil, "delete schema[%s/%s] failed, service does not exist, operator: %s",
+			in.ServiceId, in.SchemaId, remoteIP)
 		return &pb.DeleteSchemaResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 
-	log.Infof("delete schema info successfully.%s", in.SchemaId)
+	log.Infof("delete schema[%s/%s] info successfully, operator: %s", in.ServiceId, in.SchemaId, remoteIP)
 	return &pb.DeleteSchemaResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Delete schema info successfully."),
 	}, nil
 }
 
 func (s *MicroServiceService) ModifySchemas(ctx context.Context, in *pb.ModifySchemasRequest) (*pb.ModifySchemasResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "modify schemas failed: invalid params.")
+		log.Errorf(err, "modify service[%s] schemas failed, operator: %s", in.ServiceId, remoteIP)
 		return &pb.ModifySchemasResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, "Invalid request."),
 		}, nil
@@ -240,13 +245,14 @@ func (s *MicroServiceService) ModifySchemas(ctx context.Context, in *pb.ModifySc
 
 	service, err := serviceUtil.GetService(ctx, domainProject, serviceId)
 	if err != nil {
-		log.Errorf(err, "modify schemas failed: get service failed. %s", serviceId)
+		log.Errorf(err, "modify service[%s] schemas failed, get service failed, operator: %s", serviceId, remoteIP)
 		return &pb.ModifySchemasResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	if service == nil {
-		log.Errorf(nil, "modify schemas failed: service does not exist. %s", serviceId)
+		log.Errorf(nil, "modify service[%s] schemas failed, service does not exist, operator: %s",
+			serviceId, remoteIP)
 		return &pb.ModifySchemasResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -254,7 +260,7 @@ func (s *MicroServiceService) ModifySchemas(ctx context.Context, in *pb.ModifySc
 
 	respErr := modifySchemas(ctx, domainProject, service, in.Schemas)
 	if respErr != nil {
-		log.Errorf(nil, "modify schemas failed: commit data failed, serviceId %s", serviceId)
+		log.Errorf(nil, "modify service[%s] schemas failed, operator: %s", serviceId, remoteIP)
 		resp := &pb.ModifySchemasResponse{
 			Response: pb.CreateResponseWithSCErr(respErr),
 		}
@@ -323,10 +329,12 @@ func schemasAnalysis(schemas []*pb.Schema, schemasFromDb []*pb.Schema, schemaIds
 }
 
 func modifySchemas(ctx context.Context, domainProject string, service *pb.MicroService, schemas []*pb.Schema) *scerr.Error {
+	remoteIP := util.GetIPFromContext(ctx)
 	serviceId := service.ServiceId
 	schemasFromDatabase, err := GetSchemasFromDatabase(ctx, domainProject, serviceId)
 	if err != nil {
-		log.Errorf(nil, "modify schema failed: get schema from database failed, %s", serviceId)
+		log.Errorf(nil, "modify service[%s] schemas failed, get schemas failed, operator: %s",
+			serviceId, remoteIP)
 		return scerr.NewError(scerr.ErrUnavailableBackend, err.Error())
 	}
 
@@ -339,22 +347,23 @@ func modifySchemas(ctx context.Context, domainProject string, service *pb.MicroS
 			rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
 			errQuota := rst.Err
 			if errQuota != nil {
-				log.Errorf(errQuota, "modify schemas info failed, serviceId is %s", serviceId)
+				log.Errorf(errQuota, "modify service[%s] schemas failed, operator: %s", serviceId, remoteIP)
 				return errQuota
 			}
 
 			service.Schemas = nonExistSchemaIds
 			opt, err := serviceUtil.UpdateService(domainProject, serviceId, service)
 			if err != nil {
-				log.Errorf(err, "modify schemas info failed, update service failed , %s", serviceId)
+				log.Errorf(err, "modify service[%s] schemas failed, update service.Schemas failed, operator: %s",
+					serviceId, remoteIP)
 				return scerr.NewError(scerr.ErrInternal, err.Error())
 			}
 			pluginOps = append(pluginOps, opt)
 		} else {
 			if len(nonExistSchemaIds) != 0 {
-				errInfo := fmt.Sprintf("non-exist schemaId %s", util.StringJoin(nonExistSchemaIds, " ,"))
-				log.Errorf(nil, "modify schemas failed, serviceId %s, %s", serviceId, errInfo)
-				return scerr.NewError(scerr.ErrUndefinedSchemaId, errInfo)
+				errInfo := fmt.Errorf("Non-existent schemaIds %v", nonExistSchemaIds)
+				log.Errorf(errInfo, "modify service[%s] schemas failed, operator: %s", serviceId, remoteIP)
+				return scerr.NewError(scerr.ErrUndefinedSchemaId, errInfo.Error())
 			}
 			for _, needUpdateSchema := range needUpdateSchemas {
 				exist, err := isExistSchemaSummary(ctx, domainProject, serviceId, needUpdateSchema.SchemaId)
@@ -365,13 +374,14 @@ func modifySchemas(ctx context.Context, domainProject string, service *pb.MicroS
 					opts := schemaWithDatabaseOpera(registry.OpPut, domainProject, serviceId, needUpdateSchema)
 					pluginOps = append(pluginOps, opts...)
 				} else {
-					log.Warnf("schema and summary already exist, skip to update, serviceId %s, schemaId %s", serviceId, needUpdateSchema.SchemaId)
+					log.Warnf("schema[%s/%s] and it's summary already exist, skip to update, operator: %s",
+						serviceId, needUpdateSchema.SchemaId, remoteIP)
 				}
 			}
 		}
 
 		for _, schema := range needAddSchemas {
-			log.Infof("add new schema: serviceId %s, schemaId %s", serviceId, schema.SchemaId)
+			log.Infof("add new schema[%s/%s], operator: %s", serviceId, schema.SchemaId, remoteIP)
 			opts := schemaWithDatabaseOpera(registry.OpPut, domainProject, service.ServiceId, schema)
 			pluginOps = append(pluginOps, opts...)
 		}
@@ -382,28 +392,28 @@ func modifySchemas(ctx context.Context, domainProject string, service *pb.MicroS
 			rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
 			err := rst.Err
 			if err != nil {
-				log.Errorf(err, "modify schemas info failed, check resource num failed, %s", serviceId)
+				log.Errorf(err, "modify service[%s] schemas failed, operator: %s", serviceId, remoteIP)
 				return err
 			}
 		}
 
 		var schemaIds []string
 		for _, schema := range needAddSchemas {
-			log.Infof("add new schema: serviceId %s, schemaId %s", serviceId, schema.SchemaId)
+			log.Infof("add new schema[%s/%s], operator: %s", serviceId, schema.SchemaId, remoteIP)
 			opts := schemaWithDatabaseOpera(registry.OpPut, domainProject, service.ServiceId, schema)
 			pluginOps = append(pluginOps, opts...)
 			schemaIds = append(schemaIds, schema.SchemaId)
 		}
 
 		for _, schema := range needUpdateSchemas {
-			log.Infof("update schema: serviceId %s, schemaId %s", serviceId, schema.SchemaId)
+			log.Infof("update schema[%s/%s], operator: %s", serviceId, schema.SchemaId, remoteIP)
 			opts := schemaWithDatabaseOpera(registry.OpPut, domainProject, serviceId, schema)
 			pluginOps = append(pluginOps, opts...)
 			schemaIds = append(schemaIds, schema.SchemaId)
 		}
 
 		for _, schema := range needDeleteSchemas {
-			log.Infof("delete non-exist schema: serviceId %s, schemaId %s", serviceId, schema.SchemaId)
+			log.Infof("delete non-existent schema[%s/%s], operator: %s", serviceId, schema.SchemaId, remoteIP)
 			opts := schemaWithDatabaseOpera(registry.OpDel, domainProject, serviceId, schema)
 			pluginOps = append(pluginOps, opts...)
 		}
@@ -411,7 +421,8 @@ func modifySchemas(ctx context.Context, domainProject string, service *pb.MicroS
 		service.Schemas = schemaIds
 		opt, err := serviceUtil.UpdateService(domainProject, serviceId, service)
 		if err != nil {
-			log.Errorf(err, "modify schema info failed, update service.Schemas failed , %s", serviceId)
+			log.Errorf(err, "modify service[%s] schemas failed, update service.Schemas failed, operator: %s",
+				serviceId, remoteIP)
 			return scerr.NewError(scerr.ErrInternal, err.Error())
 		}
 		pluginOps = append(pluginOps, opt)
@@ -437,7 +448,7 @@ func isExistSchemaId(service *pb.MicroService, schemas []*pb.Schema) bool {
 	serviceSchemaIds := service.Schemas
 	for _, schema := range schemas {
 		if !containsValueInSlice(serviceSchemaIds, schema.SchemaId) {
-			log.Errorf(nil, "schema not exist schemaId: %s, serviceId %s", schema.SchemaId, service.ServiceId)
+			log.Errorf(nil, "schema[%s/%s] does not exist schemaId", service.ServiceId, schema.SchemaId)
 			return false
 		}
 	}
@@ -461,7 +472,7 @@ func GetSchemasFromDatabase(ctx context.Context, domainProject string, serviceId
 		registry.WithPrefix(),
 		registry.WithStrKey(key))
 	if err != nil {
-		log.Errorf(err, "Get schema of one service failed. %s", serviceId)
+		log.Errorf(err, "get service[%s]'s schema failed", serviceId)
 		return nil, err
 	}
 	schemas := make([]*pb.Schema, 0, len(resp.Kvs))
@@ -480,6 +491,7 @@ func GetSchemasFromDatabase(ctx context.Context, domainProject string, serviceId
 }
 
 func (s *MicroServiceService) ModifySchema(ctx context.Context, request *pb.ModifySchemaRequest) (*pb.ModifySchemaResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	domainProject := util.ParseDomainProject(ctx)
 	respErr := s.canModifySchema(ctx, domainProject, request)
 	if respErr != nil {
@@ -502,7 +514,7 @@ func (s *MicroServiceService) ModifySchema(ctx context.Context, request *pb.Modi
 	}
 	err := s.modifySchema(ctx, serviceId, &schema)
 	if err != nil {
-		log.Errorf(err, "modify schema failed, serviceId %s, schemaId %s", serviceId, schemaId)
+		log.Errorf(err, "modify schema[%s/%s] failed, operator: %s", serviceId, schemaId, remoteIP)
 		resp := &pb.ModifySchemaResponse{
 			Response: pb.CreateResponseWithSCErr(err),
 		}
@@ -512,22 +524,24 @@ func (s *MicroServiceService) ModifySchema(ctx context.Context, request *pb.Modi
 		return resp, nil
 	}
 
-	log.Infof("modify schema successfully: serviceId %s, schemaId %s.", serviceId, schemaId)
+	log.Infof("modify schema[%s/%s] successfully, operator: %s", serviceId, schemaId, remoteIP)
 	return &pb.ModifySchemaResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "modify schema info success"),
 	}, nil
 }
 
 func (s *MicroServiceService) canModifySchema(ctx context.Context, domainProject string, in *pb.ModifySchemaRequest) *scerr.Error {
+	remoteIP := util.GetIPFromContext(ctx)
 	serviceId := in.ServiceId
 	schemaId := in.SchemaId
 	if len(schemaId) == 0 || len(serviceId) == 0 {
-		log.Errorf(nil, "update schema failed: invalid params.")
+		log.Errorf(nil, "update schema[%s/%s] failed, invalid params, operator: %s",
+			serviceId, schemaId, remoteIP)
 		return scerr.NewError(scerr.ErrInvalidParams, "serviceId or schemaId is nil")
 	}
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "update schema failed, serviceId %s, schemaId %s: invalid params.", serviceId, schemaId)
+		log.Errorf(err, "update schema[%s/%s] failed, operator: %s", serviceId, schemaId, remoteIP)
 		return scerr.NewError(scerr.ErrInvalidParams, err.Error())
 	}
 
@@ -535,27 +549,30 @@ func (s *MicroServiceService) canModifySchema(ctx context.Context, domainProject
 	rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
 	errQuota := rst.Err
 	if errQuota != nil {
-		log.Errorf(errQuota, "modify schema info failed, check resource num failed, %s, %s", serviceId, schemaId)
+		log.Errorf(errQuota, "update schema[%s/%s] failed, operator: %s", serviceId, schemaId, remoteIP)
 		return errQuota
 	}
 	if len(in.Summary) == 0 {
-		log.Warnf("service %s schema %s summary is empty.", in.ServiceId, schemaId)
+		log.Warnf("schema[%s/%s]'s summary is empty, operator: %s", serviceId, schemaId, remoteIP)
 	}
 	return nil
 }
 
 func (s *MicroServiceService) modifySchema(ctx context.Context, serviceId string, schema *pb.Schema) *scerr.Error {
+	remoteIP := util.GetIPFromContext(ctx)
 	domainProject := util.ParseDomainProject(ctx)
 	schemaId := schema.SchemaId
 
 	service, err := serviceUtil.GetService(ctx, domainProject, serviceId)
 	if err != nil {
-		log.Errorf(err, "modify schema failed, serviceId %s, schemaId %s: get service failed.", serviceId, schemaId)
+		log.Errorf(err, "modify schema[%s/%s] failed, get service failed, operator: %s",
+			serviceId, schemaId, remoteIP)
 		return scerr.NewError(scerr.ErrInternal, err.Error())
 	}
 	if service == nil {
-		log.Errorf(nil, "modify schema failed, serviceId %s, schemaId %s: service not exist", serviceId, schemaId)
-		return scerr.NewError(scerr.ErrServiceNotExists, "service non-exist")
+		log.Errorf(nil, "modify schema[%s/%s] failed, service does not exist, operator: %s",
+			serviceId, schemaId, remoteIP)
+		return scerr.NewError(scerr.ErrServiceNotExists, "Service does not exist")
 	}
 
 	var pluginOps []registry.PluginOp
@@ -563,30 +580,34 @@ func (s *MicroServiceService) modifySchema(ctx context.Context, serviceId string
 
 	if len(service.Environment) == 0 || service.Environment == pb.ENV_PROD {
 		if len(service.Schemas) != 0 && !isExist {
-			return scerr.NewError(scerr.ErrUndefinedSchemaId, "schemaId non-exist, can't be added, environment is production")
+			return scerr.NewError(scerr.ErrUndefinedSchemaId, "Non-existent schemaId can't be added in "+pb.ENV_PROD)
 		}
 
 		key := apt.GenerateServiceSchemaKey(domainProject, serviceId, schemaId)
 		respSchema, err := backend.Store().Schema().Search(ctx, registry.WithStrKey(key), registry.WithCountOnly())
 		if err != nil {
-			log.Errorf(err, "modify schema failed, get schema summary failed, %s %s", serviceId, schemaId)
+			log.Errorf(err, "modify schema[%s/%s] failed, get schema summary failed, operator: %s",
+				serviceId, schemaId, remoteIP)
 			return scerr.NewError(scerr.ErrUnavailableBackend, err.Error())
 		}
 
 		if respSchema.Count != 0 {
 			if len(schema.Summary) == 0 {
-				log.Errorf(err, "prod mode, schema already exist, can not change, %s %s", serviceId, schemaId)
-				return scerr.NewError(scerr.ErrModifySchemaNotAllow, "schema already exist, can not change, environment is production")
+				log.Errorf(err, "%s mode, schema[%s/%s] already exists, can not be changed, operator: %s",
+					pb.ENV_PROD, serviceId, schemaId, remoteIP)
+				return scerr.NewError(scerr.ErrModifySchemaNotAllow, "schema already exist, can not be changed in "+pb.ENV_PROD)
 			}
 
 			exist, err := isExistSchemaSummary(ctx, domainProject, serviceId, schemaId)
 			if err != nil {
-				log.Errorf(err, "check schema summary is exist failed, serviceId %s, schemaId %s", serviceId, schemaId)
+				log.Errorf(err, "check schema[%s/%s] summary existence failed, operator: %s",
+					serviceId, schemaId, remoteIP)
 				return scerr.NewError(scerr.ErrInternal, err.Error())
 			}
 			if exist {
-				log.Errorf(err, "prod mode, schema already exist, can not change, %s %s", serviceId, schemaId)
-				return scerr.NewError(scerr.ErrModifySchemaNotAllow, "schema already exist, can not change, environment is production")
+				log.Errorf(err, "%s mode, schema[%s/%s] already exist, can not be changed, operator: %s",
+					pb.ENV_PROD, serviceId, schemaId, remoteIP)
+				return scerr.NewError(scerr.ErrModifySchemaNotAllow, "schema already exist, can not be changed in "+pb.ENV_PROD)
 			}
 		}
 
@@ -594,7 +615,8 @@ func (s *MicroServiceService) modifySchema(ctx context.Context, serviceId string
 			service.Schemas = append(service.Schemas, schemaId)
 			opt, err := serviceUtil.UpdateService(domainProject, serviceId, service)
 			if err != nil {
-				log.Errorf(err, "modify schema failed, update service.Schemas failed , serviceId %s, schemaId %s", serviceId, schemaId)
+				log.Errorf(err, "modify schema[%s/%s] failed, update service.Schemas failed, operator: %s",
+					serviceId, schemaId, remoteIP)
 				return scerr.NewError(scerr.ErrInternal, err.Error())
 			}
 			pluginOps = append(pluginOps, opt)
@@ -604,7 +626,8 @@ func (s *MicroServiceService) modifySchema(ctx context.Context, serviceId string
 			service.Schemas = append(service.Schemas, schemaId)
 			opt, err := serviceUtil.UpdateService(domainProject, serviceId, service)
 			if err != nil {
-				log.Errorf(err, "modify schema failed, update service.Schemas failed , serviceId %s, schemaId %s", serviceId, schemaId)
+				log.Errorf(err, "modify schema[%s/%s] failed, update service.Schemas failed, operator: %s",
+					serviceId, schemaId, remoteIP)
 				return scerr.NewError(scerr.ErrInternal, err.Error())
 			}
 			pluginOps = append(pluginOps, opt)
@@ -668,7 +691,7 @@ func getSchemaSummary(ctx context.Context, domainProject string, serviceId strin
 		registry.WithStrKey(key),
 	)
 	if err != nil {
-		log.Errorf(err, "get %s schema %s summary failed", serviceId, schemaId)
+		log.Errorf(err, "get schema[%s/%s] summary failed", serviceId, schemaId)
 		return "", err
 	}
 	if len(resp.Kvs) == 0 {
diff --git a/server/service/tag.go b/server/service/tag.go
index 6b90f63b..37e65e19 100644
--- a/server/service/tag.go
+++ b/server/service/tag.go
@@ -32,9 +32,10 @@ import (
 )
 
 func (s *MicroServiceService) AddTags(ctx context.Context, in *pb.AddServiceTagsRequest) (*pb.AddServiceTagsResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "add service tags failed, serviceId %s, tags %v: invalid parameters.", in.ServiceId, in.Tags)
+		log.Errorf(err, "add service[%s]'s tags %v failed, operator: %s", in.ServiceId, in.Tags, remoteIP)
 		return &pb.AddServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -43,18 +44,19 @@ func (s *MicroServiceService) AddTags(ctx context.Context, in *pb.AddServiceTags
 	domainProject := util.ParseDomainProject(ctx)
 	// service id存在性校验
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(nil, "add service tags failed, serviceId %s, tags %v: service not exist.", in.ServiceId, in.Tags)
+		log.Errorf(nil, "add service[%s]'s tags %v failed, service does not exist, operator: %s",
+			in.ServiceId, in.Tags, remoteIP)
 		return &pb.AddServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 
-	addTags := in.GetTags()
+	addTags := in.Tags
 	res := quota.NewApplyQuotaResource(quota.TagQuotaType, domainProject, in.ServiceId, int64(len(addTags)))
 	rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
 	errQuota := rst.Err
 	if errQuota != nil {
-		log.Errorf(errQuota, "add tag info failed, check resource num failed, %s", in.ServiceId)
+		log.Errorf(errQuota, "add service[%s]'s tags %v failed, operator: %s", in.ServiceId, addTags, remoteIP)
 		response := &pb.AddServiceTagsResponse{
 			Response: pb.CreateResponseWithSCErr(errQuota),
 		}
@@ -66,7 +68,8 @@ func (s *MicroServiceService) AddTags(ctx context.Context, in *pb.AddServiceTags
 
 	dataTags, err := serviceUtil.GetTagsUtils(ctx, domainProject, in.ServiceId)
 	if err != nil {
-		log.Errorf(err, "add service tags failed, serviceId %s, tags %v: get existed tag failed.", in.ServiceId, in.Tags)
+		log.Errorf(err, "add service[%s]'s tags %v failed, get existed tag failed, operator: %s",
+			in.ServiceId, addTags, remoteIP)
 		return &pb.AddServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -81,7 +84,7 @@ func (s *MicroServiceService) AddTags(ctx context.Context, in *pb.AddServiceTags
 
 	checkErr := serviceUtil.AddTagIntoETCD(ctx, domainProject, in.ServiceId, dataTags)
 	if checkErr != nil {
-		log.Errorf(checkErr, "add service tags failed, serviceId %s, tags %v", in.ServiceId, in.Tags)
+		log.Errorf(checkErr, "add service[%s]'s tags %v failed, operator: %s", in.ServiceId, in.Tags, remoteIP)
 		resp := &pb.AddServiceTagsResponse{
 			Response: pb.CreateResponseWithSCErr(checkErr),
 		}
@@ -91,17 +94,18 @@ func (s *MicroServiceService) AddTags(ctx context.Context, in *pb.AddServiceTags
 		return resp, nil
 	}
 
-	log.Infof("add service tags successful, serviceId %s, tags %v.", in.ServiceId, in.Tags)
+	log.Infof("add service[%s]'s tags %v successfully, operator: %s", in.ServiceId, in.Tags, remoteIP)
 	return &pb.AddServiceTagsResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Add service tags successfully."),
 	}, nil
 }
 
 func (s *MicroServiceService) UpdateTag(ctx context.Context, in *pb.UpdateServiceTagRequest) (*pb.UpdateServiceTagResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	tagFlag := util.StringJoin([]string{in.Key, in.Value}, "/")
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "update service tag failed, serviceId %s, tag %s: invalid params.", in.ServiceId, tagFlag)
+		log.Errorf(err, "update service[%s]'s tag[%s] failed, operator: %s", in.ServiceId, tagFlag, remoteIP)
 		return &pb.UpdateServiceTagResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -110,7 +114,8 @@ func (s *MicroServiceService) UpdateTag(ctx context.Context, in *pb.UpdateServic
 	domainProject := util.ParseDomainProject(ctx)
 
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(err, "update service tag failed, serviceId %s, tag %s: service not exist.", in.ServiceId, tagFlag)
+		log.Errorf(err, "update service[%s]'s tag[%s] failed, service does not exist, operator: %s",
+			in.ServiceId, tagFlag, remoteIP)
 		return &pb.UpdateServiceTagResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -118,16 +123,18 @@ func (s *MicroServiceService) UpdateTag(ctx context.Context, in *pb.UpdateServic
 
 	tags, err := serviceUtil.GetTagsUtils(ctx, domainProject, in.ServiceId)
 	if err != nil {
-		log.Errorf(err, "update service tag failed, serviceId %s, tag %s: get tag failed.", in.ServiceId, tagFlag)
+		log.Errorf(err, "update service[%s]'s tag[%s] failed, get tag failed, operator: %s",
+			in.ServiceId, tagFlag, remoteIP)
 		return &pb.UpdateServiceTagResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
 	}
 	//check tag 是否存在
 	if _, ok := tags[in.Key]; !ok {
-		log.Errorf(nil, "update service tag failed, serviceId %s, tag %s: tag not exist, please add first.", in.ServiceId, tagFlag)
+		log.Errorf(nil, "update service[%s]'s tag[%s] failed, tag does not exist, operator: %s",
+			in.ServiceId, tagFlag, remoteIP)
 		return &pb.UpdateServiceTagResponse{
-			Response: pb.CreateResponse(scerr.ErrTagNotExists, "Update tag for service failed for update tags not exist, please add first."),
+			Response: pb.CreateResponse(scerr.ErrTagNotExists, "Tag does not exist, please add one first."),
 		}, nil
 	}
 
@@ -139,7 +146,7 @@ func (s *MicroServiceService) UpdateTag(ctx context.Context, in *pb.UpdateServic
 
 	checkErr := serviceUtil.AddTagIntoETCD(ctx, domainProject, in.ServiceId, copyTags)
 	if checkErr != nil {
-		log.Errorf(checkErr, "update service tag failed, serviceId %s, tag %s.", in.ServiceId, tagFlag)
+		log.Errorf(checkErr, "update service[%s]'s tag[%s] failed, operator: %s", in.ServiceId, tagFlag, remoteIP)
 		resp := &pb.UpdateServiceTagResponse{
 			Response: pb.CreateResponseWithSCErr(checkErr),
 		}
@@ -149,16 +156,17 @@ func (s *MicroServiceService) UpdateTag(ctx context.Context, in *pb.UpdateServic
 		return resp, nil
 	}
 
-	log.Infof("update tag successful, serviceId %s, tag %s.", in.ServiceId, tagFlag)
+	log.Infof("update service[%s]'s tag[%s] successfully, operator: %s", in.ServiceId, tagFlag, remoteIP)
 	return &pb.UpdateServiceTagResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service tag success."),
 	}, nil
 }
 
 func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServiceTagsRequest) (*pb.DeleteServiceTagsResponse, error) {
+	remoteIP := util.GetIPFromContext(ctx)
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "delete service tags failed, serviceId %s, tags %v: invalid params.", in.ServiceId, in.Keys)
+		log.Errorf(err, "delete service[%s]'s tags %v failed, operator: %s", in.ServiceId, in.Keys, remoteIP)
 		return &pb.DeleteServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -167,7 +175,8 @@ func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServi
 	domainProject := util.ParseDomainProject(ctx)
 
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(nil, "delete service tags failed, serviceId %s, tags %v: service not exist.", in.ServiceId, in.Keys)
+		log.Errorf(nil, "delete service[%s]'s tags %v failed, service does not exist, operator: %s",
+			in.ServiceId, in.Keys, remoteIP)
 		return &pb.DeleteServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -175,7 +184,8 @@ func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServi
 
 	tags, err := serviceUtil.GetTagsUtils(ctx, domainProject, in.ServiceId)
 	if err != nil {
-		log.Errorf(err, "delete service tags failed, serviceId %s, tags %v: query service failed.", in.ServiceId, in.Keys)
+		log.Errorf(err, "delete service[%s]'s tags %v failed, get service tags failed, operator: %s",
+			in.ServiceId, in.Keys, remoteIP)
 		return &pb.DeleteServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -187,7 +197,8 @@ func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServi
 	}
 	for _, key := range in.Keys {
 		if _, ok := copyTags[key]; !ok {
-			log.Errorf(nil, "delete service tags failed, serviceId %s, tags %v: tag %s not exist.", in.ServiceId, in.Keys, key)
+			log.Errorf(nil, "delete service[%s]'s tags %v failed, tag[%s] does not exist, operator: %s",
+				in.ServiceId, in.Keys, key, remoteIP)
 			return &pb.DeleteServiceTagsResponse{
 				Response: pb.CreateResponse(scerr.ErrTagNotExists, "Delete tags failed for this key "+key+" does not exist."),
 			}, nil
@@ -198,7 +209,8 @@ func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServi
 	// tags 可能size == 0
 	data, err := json.Marshal(copyTags)
 	if err != nil {
-		log.Errorf(err, "delete service tags failed, serviceId %s, tags %v: marshall service tag failed.", in.ServiceId, in.Keys)
+		log.Errorf(err, "delete service[%s]'s tags %v failed, marshall service tags failed, operator: %s",
+			in.ServiceId, in.Keys, remoteIP)
 		return &pb.DeleteServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
@@ -213,19 +225,21 @@ func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServi
 			registry.CMP_NOT_EQUAL, 0)},
 		nil)
 	if err != nil {
-		log.Errorf(err, "delete service tags failed, serviceId %s, tags %v: commit tag data into etcd failed.", in.ServiceId, in.Keys)
+		log.Errorf(err, "delete service[%s]'s tags %v failed, operator: %s",
+			in.ServiceId, in.Keys, remoteIP)
 		return &pb.DeleteServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()),
 		}, err
 	}
 	if !resp.Succeeded {
-		log.Errorf(err, "delete service properties failed, serviceId is %s, tags %v: service does not exist.", in.ServiceId, in.Keys)
+		log.Errorf(err, "delete service[%s]'s tags %v failed, service does not exist, operator: %s",
+			in.ServiceId, in.Keys, remoteIP)
 		return &pb.DeleteServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
 	}
 
-	log.Infof("delete service tags successful: serviceId %s, tag %v.", in.ServiceId, in.Keys)
+	log.Infof("delete service[%s]'s tags %v successfully, operator: %s", in.ServiceId, in.Keys, remoteIP)
 	return &pb.DeleteServiceTagsResponse{
 		Response: pb.CreateResponse(pb.Response_SUCCESS, "Delete service tags successfully."),
 	}, nil
@@ -234,7 +248,7 @@ func (s *MicroServiceService) DeleteTags(ctx context.Context, in *pb.DeleteServi
 func (s *MicroServiceService) GetTags(ctx context.Context, in *pb.GetServiceTagsRequest) (*pb.GetServiceTagsResponse, error) {
 	err := Validate(in)
 	if err != nil {
-		log.Errorf(err, "get service tags failed, serviceId %s: invalid parameters.", in.ServiceId)
+		log.Errorf(err, "get service[%s]'s tags failed", in.ServiceId)
 		return &pb.GetServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
 		}, nil
@@ -243,7 +257,7 @@ func (s *MicroServiceService) GetTags(ctx context.Context, in *pb.GetServiceTags
 	domainProject := util.ParseDomainProject(ctx)
 
 	if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
-		log.Errorf(err, "get service tags failed, serviceId %s: service not exist.", in.ServiceId)
+		log.Errorf(err, "get service[%s]'s tags failed, service does not exist", in.ServiceId)
 		return &pb.GetServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
 		}, nil
@@ -251,7 +265,7 @@ func (s *MicroServiceService) GetTags(ctx context.Context, in *pb.GetServiceTags
 
 	tags, err := serviceUtil.GetTagsUtils(ctx, domainProject, in.ServiceId)
 	if err != nil {
-		log.Errorf(err, "get service tags failed, serviceId %s: get tag failed.", in.ServiceId)
+		log.Errorf(err, "get service[%s]'s tags failed, get tags failed", in.ServiceId)
 		return &pb.GetServiceTagsResponse{
 			Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
 		}, err
diff --git a/server/service/util/dependency.go b/server/service/util/dependency.go
index 57b0ef31..cb49a69b 100644
--- a/server/service/util/dependency.go
+++ b/server/service/util/dependency.go
@@ -40,7 +40,7 @@ func (dep *Dependency) removeConsumerOfProviderRule(ctx context.Context) ([]regi
 	opts := make([]registry.PluginOp, 0, len(dep.DeleteDependencyRuleList))
 	for _, providerRule := range dep.DeleteDependencyRuleList {
 		proProkey := apt.GenerateProviderDependencyRuleKey(providerRule.Tenant, providerRule)
-		log.Debugf("This proProkey is %s.", proProkey)
+		log.Debugf("This proProkey is %s", proProkey)
 		consumerValue, err := TransferToMicroServiceDependency(ctx, proProkey)
 		if err != nil {
 			return nil, err
@@ -59,7 +59,7 @@ func (dep *Dependency) removeConsumerOfProviderRule(ctx context.Context) ([]regi
 		}
 		data, err := json.Marshal(consumerValue)
 		if err != nil {
-			log.Errorf(err, "Marshal tmpValue failed.")
+			log.Errorf(err, "Marshal MicroServiceDependency failed")
 			return nil, err
 		}
 		opts = append(opts, registry.OpPut(
@@ -81,7 +81,7 @@ func (dep *Dependency) addConsumerOfProviderRule(ctx context.Context) ([]registr
 
 		data, errMarshal := json.Marshal(tmpValue)
 		if errMarshal != nil {
-			log.Errorf(errMarshal, "Marshal tmpValue failed.")
+			log.Errorf(errMarshal, "Marshal MicroServiceDependency failed")
 			return nil, errMarshal
 		}
 		opts = append(opts, registry.OpPut(
@@ -105,7 +105,7 @@ func (dep *Dependency) updateProvidersRuleOfConsumer(_ context.Context) ([]regis
 	}
 	data, err := json.Marshal(dependency)
 	if err != nil {
-		log.Errorf(err, "Marshal tmpValue failed.")
+		log.Errorf(err, "Marshal MicroServiceDependency failed")
 		return nil, err
 	}
 	return []registry.PluginOp{registry.OpPut(registry.WithStrKey(conKey), registry.WithValue(data))}, nil
diff --git a/server/service/util/dependency_query.go b/server/service/util/dependency_query.go
index db036596..7a62b31e 100644
--- a/server/service/util/dependency_query.go
+++ b/server/service/util/dependency_query.go
@@ -86,11 +86,13 @@ func (dr *DependencyRelation) GetDependencyProviders(opts ...DependencyRelationF
 		for _, providerId := range providerIds {
 			provider, err := GetService(dr.ctx, key.Tenant, providerId)
 			if err != nil {
-				log.Warnf("Provider does not exist, %s/%s/%s",
-					key.AppId, key.ServiceName, key.Version)
+				log.Warnf("get provider[%s/%s/%s/%s] failed",
+					key.Environment, key.AppId, key.ServiceName, key.Version)
 				continue
 			}
 			if provider == nil {
+				log.Warnf("provider[%s/%s/%s/%s] does not exist",
+					key.Environment, key.AppId, key.ServiceName, key.Version)
 				continue
 			}
 			if op.NonSelf && providerId == dr.consumer.ServiceId {
@@ -116,7 +118,6 @@ func (dr *DependencyRelation) GetDependencyProviderIds() ([]string, error) {
 
 func (dr *DependencyRelation) getProviderKeys() ([]*pb.MicroServiceKey, error) {
 	if dr.consumer == nil {
-		log.Infof("dr.consumer is nil ------->")
 		return nil, fmt.Errorf("Invalid consumer")
 	}
 	consumerMicroServiceKey := pb.MicroServiceToKey(dr.domainProject, dr.consumer)
@@ -136,19 +137,19 @@ func (dr *DependencyRelation) getDependencyProviderIds(providerRules []*pb.Micro
 		switch {
 		case provider.ServiceName == "*":
 			if err != nil {
-				log.Errorf(err, "Add dependency failed, rely all service: get all services failed.")
+				log.Errorf(err, "get all serviceIds failed")
 				return provideServiceIds, err
 			}
 			return serviceIds, nil
 		default:
 			if err != nil {
-				log.Errorf(err, "Get providerIds failed, service: %s/%s/%s",
-					provider.AppId, provider.ServiceName, provider.Version)
+				log.Errorf(err, "get service[%s/%s/%s/%s]'s providerIds failed",
+					provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
 				return provideServiceIds, err
 			}
 			if len(serviceIds) == 0 {
-				log.Warnf("Get providerIds is empty, service: %s/%s/%s does not exist",
-					provider.AppId, provider.ServiceName, provider.Version)
+				log.Warnf("get service[%s/%s/%s/%s]'s providerIds is empty",
+					provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
 				continue
 			}
 			provideServiceIds = append(provideServiceIds, serviceIds...)
@@ -161,7 +162,8 @@ func (dr *DependencyRelation) parseDependencyRule(dependencyRule *pb.MicroServic
 	opts := FromContext(dr.ctx)
 	switch {
 	case dependencyRule.ServiceName == "*":
-		log.Infof("Rely all service, * type, consumerId %s", dr.consumer.ServiceId)
+		log.Infof("service[%s/%s/%s/%s] rely all service",
+			dr.consumer.Environment, dr.consumer.AppId, dr.consumer.ServiceName, dr.consumer.Version)
 		splited := strings.Split(apt.GenerateServiceIndexKey(dependencyRule), "/")
 		allServiceKey := util.StringJoin(splited[:len(splited)-3], "/") + "/"
 		sopts := append(opts,
@@ -184,7 +186,7 @@ func (dr *DependencyRelation) parseDependencyRule(dependencyRule *pb.MicroServic
 func (dr *DependencyRelation) GetDependencyConsumers(opts ...DependencyRelationFilterOption) ([]*pb.MicroService, error) {
 	consumerDependAllList, err := dr.getDependencyConsumersOfProvider()
 	if err != nil {
-		log.Errorf(err, "Get consumers of provider rule failed, %s", dr.provider.ServiceId)
+		log.Errorf(err, "get service[%s]'s consumers failed", dr.provider.ServiceId)
 		return nil, err
 	}
 	consumers := make([]*pb.MicroService, 0)
@@ -199,7 +201,8 @@ func (dr *DependencyRelation) GetDependencyConsumers(opts ...DependencyRelationF
 			return nil, err
 		}
 		if service == nil {
-			log.Warnf("Consumer does not exist, %v", consumer)
+			log.Warnf("consumer[%s/%s/%s/%s] does not exist",
+				consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version)
 			continue
 		}
 
@@ -218,7 +221,8 @@ func (dr *DependencyRelation) getServiceByMicroServiceKey(service *pb.MicroServi
 		return nil, err
 	}
 	if len(serviceId) == 0 {
-		log.Warnf("Service not exist,%v", service)
+		log.Warnf("service[%s/%s/%s/%s] not exist",
+			service.Environment, service.AppId, service.ServiceName, service.Version)
 		return nil, nil
 	}
 	return GetService(dr.ctx, service.Tenant, serviceId)
@@ -233,11 +237,13 @@ func (dr *DependencyRelation) GetDependencyConsumerIds() ([]string, error) {
 	for _, consumer := range consumerDependAllList {
 		consumerId, err := GetServiceId(dr.ctx, consumer)
 		if err != nil {
-			log.Errorf(err, "Get consumer failed, %v", consumer)
+			log.Errorf(err, "get consumer[%s/%s/%s/%s] failed",
+				consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version)
 			return nil, err
 		}
 		if len(consumerId) == 0 {
-			log.Warnf("Get consumer not exist, %v", consumer)
+			log.Warnf("get consumer[%s/%s/%s/%s] not exist",
+				consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version)
 			continue
 		}
 		consumerIds = append(consumerIds, consumerId)
@@ -248,20 +254,19 @@ func (dr *DependencyRelation) GetDependencyConsumerIds() ([]string, error) {
 
 func (dr *DependencyRelation) getDependencyConsumersOfProvider() ([]*pb.MicroServiceKey, error) {
 	if dr.provider == nil {
-		log.Infof("dr.provider is nil ------->")
 		return nil, fmt.Errorf("Invalid provider")
 	}
 	providerService := pb.MicroServiceToKey(dr.domainProject, dr.provider)
 	consumerDependAllList, err := dr.getConsumerOfDependAllServices()
 	if err != nil {
-		log.Errorf(err, "Get consumer that depend on all services failed, %s", dr.provider.ServiceId)
+		log.Errorf(err, "get consumers that depend on all services failed, %s", dr.provider.ServiceId)
 		return nil, err
 	}
 
 	consumerDependList, err := dr.getConsumerOfSameServiceNameAndAppId(providerService)
 	if err != nil {
-		log.Errorf(err, "Get consumer that depend on same serviceName and appid rule failed, %s",
-			dr.provider.ServiceId)
+		log.Errorf(err, "get consumers that depend on rule[%s/%s/%s/%s] failed",
+			dr.provider.Environment, dr.provider.AppId, dr.provider.ServiceName, dr.provider.Version)
 		return nil, err
 	}
 	consumerDependAllList = append(consumerDependAllList, consumerDependList...)
@@ -275,11 +280,13 @@ func (dr *DependencyRelation) getConsumerOfDependAllServices() ([]*pb.MicroServi
 	opts := append(FromContext(dr.ctx), registry.WithStrKey(relyAllKey))
 	rsp, err := backend.Store().DependencyRule().Search(dr.ctx, opts...)
 	if err != nil {
-		log.Errorf(err, "get consumer that rely all service failed.")
+		log.Errorf(err, "get consumers that rely all service failed, %s/%s/%s/%s",
+			dr.provider.Environment, dr.provider.AppId, dr.provider.ServiceName, dr.provider.Version)
 		return nil, err
 	}
 	if len(rsp.Kvs) != 0 {
-		log.Infof("consumer that rely all service exist.ServiceName: %s.", dr.provider.ServiceName)
+		log.Infof("exist consumers that rely all service, %s/%s/%s/%s",
+			dr.provider.Environment, dr.provider.AppId, dr.provider.ServiceName, dr.provider.Version)
 		return rsp.Kvs[0].Value.(*pb.MicroServiceDependency).Dependency, nil
 	}
 	return nil, nil
@@ -296,7 +303,8 @@ func (dr *DependencyRelation) getConsumerOfSameServiceNameAndAppId(provider *pb.
 		registry.WithPrefix())
 	rsp, err := backend.Store().DependencyRule().Search(dr.ctx, opts...)
 	if err != nil {
-		log.Errorf(err, "get all dependency rule failed: provider rule key %v.", provider)
+		log.Errorf(err, "get service[%s/%s/%s]'s dependency rules failed",
+			provider.Environment, provider.AppId, provider.ServiceName)
 		return nil, err
 	}
 
@@ -310,12 +318,14 @@ func (dr *DependencyRelation) getConsumerOfSameServiceNameAndAppId(provider *pb.
 			if latestServiceId == nil {
 				latestServiceId, _, err = FindServiceIds(dr.ctx, providerVersionRule, provider)
 				if err != nil {
-					log.Errorf(err, "Get latest service failed.")
+					log.Errorf(err, "get service[%s/%s/%s/%s]'s serviceId failed",
+						provider.Environment, provider.AppId, provider.ServiceName, providerVersionRule)
 					return nil, err
 				}
 			}
 			if len(latestServiceId) == 0 {
-				log.Infof("%s 's providerId is empty,no this service.", provider.ServiceName)
+				log.Infof("service[%s/%s/%s/%s] does not exist",
+					provider.Environment, provider.AppId, provider.ServiceName, providerVersionRule)
 				continue
 			}
 			if dr.provider.ServiceId != latestServiceId[0] {
diff --git a/server/service/util/dependency_util.go b/server/service/util/dependency_util.go
index f35e63d4..84b583d3 100644
--- a/server/service/util/dependency_util.go
+++ b/server/service/util/dependency_util.go
@@ -36,7 +36,7 @@ func GetConsumerIds(ctx context.Context, domainProject string, provider *pb.Micr
 	dr := NewProviderDependencyRelation(ctx, domainProject, provider)
 	consumerIds, err := dr.GetDependencyConsumerIds()
 	if err != nil {
-		log.Errorf(err, "Get dependency consumerIds failed.%s", provider.ServiceId)
+		log.Errorf(err, "get service[%s]'s consumerIds failed", provider.ServiceId)
 		return nil, err
 	}
 	return consumerIds, nil
@@ -47,7 +47,7 @@ func GetProviderIds(ctx context.Context, domainProject string, consumer *pb.Micr
 	dr := NewConsumerDependencyRelation(ctx, domainProject, consumer)
 	providerIds, err := dr.GetDependencyProviderIds()
 	if err != nil {
-		log.Errorf(err, "Get dependency providerIds failed.%s", consumer.ServiceId)
+		log.Errorf(err, "get service[%s]'s providerIds failed", consumer.ServiceId)
 		return nil, err
 	}
 	return providerIds, nil
@@ -185,7 +185,9 @@ func AddServiceVersionRule(ctx context.Context, domainProject string, consumer *
 		return err
 	}
 	if !resp.Succeeded {
-		log.Infof("find request into dependency queue successfully, %s: %v", key, r)
+		log.Infof("put in queue[%s/%s]: consumer[%s/%s/%s/%s] -> provider[%s/%s/%s/%s]", consumer.ServiceId, id,
+			consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version,
+			provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
 	}
 	return nil
 }
@@ -198,7 +200,7 @@ func TransferToMicroServiceDependency(ctx context.Context, key string) (*pb.Micr
 	opts := append(FromContext(ctx), registry.WithStrKey(key))
 	res, err := backend.Store().DependencyRule().Search(ctx, opts...)
 	if err != nil {
-		log.Errorf(nil, "Get dependency rule failed.")
+		log.Errorf(nil, "get dependency rule[%s] failed", key)
 		return nil, err
 	}
 	if len(res.Kvs) != 0 {
@@ -235,8 +237,8 @@ func parseAddOrUpdateRules(ctx context.Context, dep *Dependency) (createDependen
 
 	oldProviderRules, err := TransferToMicroServiceDependency(ctx, conKey)
 	if err != nil {
-		log.Errorf(err, "maintain dependency rule failed, consumer %s/%s/%s: get consumer depedency rule failed.",
-			dep.Consumer.AppId, dep.Consumer.ServiceName, dep.Consumer.Version)
+		log.Errorf(err, "update dependency rule failed, get consumer[%s/%s/%s/%s]'s dependency rule failed",
+			dep.Consumer.Environment, dep.Consumer.AppId, dep.Consumer.ServiceName, dep.Consumer.Version)
 		return
 	}
 
@@ -280,8 +282,8 @@ func parseOverrideRules(ctx context.Context, dep *Dependency) (createDependencyR
 
 	oldProviderRules, err := TransferToMicroServiceDependency(ctx, conKey)
 	if err != nil {
-		log.Errorf(err, "maintain dependency rule failed, consumer %s/%s/%s: get consumer depedency rule failed.",
-			dep.Consumer.AppId, dep.Consumer.ServiceName, dep.Consumer.Version)
+		log.Errorf(err, "override dependency rule failed, get consumer[%s/%s/%s/%s]'s dependency rule failed",
+			dep.Consumer.Environment, dep.Consumer.AppId, dep.Consumer.ServiceName, dep.Consumer.Version)
 		return
 	}
 
@@ -305,7 +307,7 @@ func parseOverrideRules(ctx context.Context, dep *Dependency) (createDependencyR
 
 func syncDependencyRule(ctx context.Context, dep *Dependency, filter func(context.Context, *Dependency) (_, _, _ []*pb.MicroServiceKey)) error {
 	//更新consumer的providers的值,consumer的版本是确定的
-	consumerFlag := strings.Join([]string{dep.Consumer.AppId, dep.Consumer.ServiceName, dep.Consumer.Version}, "/")
+	consumerFlag := strings.Join([]string{dep.Consumer.Environment, dep.Consumer.AppId, dep.Consumer.ServiceName, dep.Consumer.Version}, "/")
 
 	createDependencyRuleList, existDependencyRuleList, deleteDependencyRuleList := filter(ctx, dep)
 	if len(createDependencyRuleList) == 0 && len(existDependencyRuleList) == 0 && len(deleteDependencyRuleList) == 0 {
@@ -313,12 +315,12 @@ func syncDependencyRule(ctx context.Context, dep *Dependency, filter func(contex
 	}
 
 	if len(deleteDependencyRuleList) != 0 {
-		log.Infof("Delete dependency rule remove for consumer %s, %v, ", consumerFlag, deleteDependencyRuleList)
+		log.Infof("delete consumer[%s]'s dependency rule %v", consumerFlag, deleteDependencyRuleList)
 		dep.DeleteDependencyRuleList = deleteDependencyRuleList
 	}
 
 	if len(createDependencyRuleList) != 0 {
-		log.Infof("New dependency rule add for consumer %s, %v, ", consumerFlag, createDependencyRuleList)
+		log.Infof("create consumer[%s]'s dependency rule %v", consumerFlag, createDependencyRuleList)
 		dep.CreateDependencyRuleList = createDependencyRuleList
 	}
 
@@ -356,7 +358,7 @@ func containServiceDependency(services []*pb.MicroServiceKey, service *pb.MicroS
 }
 
 func BadParamsResponse(detailErr string) *pb.CreateDependenciesResponse {
-	log.Errorf(nil, "Request params is invalid. %s", detailErr)
+	log.Errorf(nil, "request params is invalid. %s", detailErr)
 	if len(detailErr) == 0 {
 		detailErr = "Request params is invalid."
 	}
@@ -370,7 +372,6 @@ func ParamsChecker(consumerInfo *pb.MicroServiceKey, providersInfo []*pb.MicroSe
 	for _, providerInfo := range providersInfo {
 		//存在带*的情况,后面的数据就不校验了
 		if providerInfo.ServiceName == "*" {
-			log.Debugf("%s 's provider contains *.", consumerInfo.ServiceName)
 			break
 		}
 		if len(providerInfo.AppId) == 0 {
diff --git a/server/service/util/instance_util.go b/server/service/util/instance_util.go
index eebd6474..77812f00 100644
--- a/server/service/util/instance_util.go
+++ b/server/service/util/instance_util.go
@@ -81,7 +81,7 @@ func GetAllInstancesOfOneService(ctx context.Context, domainProject string, serv
 	opts := append(FromContext(ctx), registry.WithStrKey(key), registry.WithPrefix())
 	resp, err := backend.Store().Instance().Search(ctx, opts...)
 	if err != nil {
-		log.Errorf(err, "Get instance of service %s from etcd failed.", serviceId)
+		log.Errorf(err, "get service[%s]'s instances failed", serviceId)
 		return nil, err
 	}
 
@@ -100,7 +100,7 @@ func GetInstanceCountOfOneService(ctx context.Context, domainProject string, ser
 		registry.WithCountOnly())
 	resp, err := backend.Store().Instance().Search(ctx, opts...)
 	if err != nil {
-		log.Errorf(err, "Get instance count of service %s from etcd failed.", serviceId)
+		log.Errorf(err, "get number of service[%s]'s instances failed", serviceId)
 		return 0, err
 	}
 	return resp.Count, nil
@@ -158,11 +158,11 @@ func DeleteServiceAllInstances(ctx context.Context, serviceId string) error {
 		registry.WithPrefix(),
 		registry.WithNoCache())
 	if err != nil {
-		log.Errorf(err, "delete service %s all instance failed: get instance lease failed.", serviceId)
+		log.Errorf(err, "delete all of service[%s]'s instances failed: get instance lease failed", serviceId)
 		return err
 	}
 	if resp.Count <= 0 {
-		log.Warnf("service %s has no deployment of instance.", serviceId)
+		log.Warnf("service[%s] has no deployment of instance.", serviceId)
 		return nil
 	}
 	for _, v := range resp.Kvs {
@@ -179,16 +179,16 @@ func QueryAllProvidersInstances(ctx context.Context, selfServiceId string) (resu
 
 	service, err := GetService(ctx, domainProject, selfServiceId)
 	if err != nil {
-		log.Errorf(err, "get service %s failed", selfServiceId)
+		log.Errorf(err, "get service[%s]'s file failed", selfServiceId)
 		return
 	}
 	if service == nil {
-		log.Errorf(nil, "service not exist, %s", selfServiceId)
+		log.Errorf(nil, "service[%s] does not exist", selfServiceId)
 		return
 	}
 	providerIds, _, err := GetAllProviderIds(ctx, domainProject, service)
 	if err != nil {
-		log.Errorf(err, "get service %s providers id set failed.", selfServiceId)
+		log.Errorf(err, "get service[%s]'s providerIds failed", selfServiceId)
 		return
 	}
 
@@ -197,7 +197,7 @@ func QueryAllProvidersInstances(ctx context.Context, selfServiceId string) (resu
 	for _, providerId := range providerIds {
 		service, err := GetServiceWithRev(ctx, domainProject, providerId, rev)
 		if err != nil {
-			log.Errorf(err, "get service %s provider service %s file with revision %d failed.",
+			log.Errorf(err, "get service[%s]'s provider[%s] file with revision %d failed",
 				selfServiceId, providerId, rev)
 			return
 		}
@@ -207,7 +207,7 @@ func QueryAllProvidersInstances(ctx context.Context, selfServiceId string) (resu
 
 		kvs, err := queryServiceInstancesKvs(ctx, providerId, rev)
 		if err != nil {
-			log.Errorf(err, "get service %s provider %s instances with revision %d failed.",
+			log.Errorf(err, "get service[%s]'s provider[%s] instances with revision %d failed",
 				selfServiceId, providerId, rev)
 			return
 		}
@@ -237,7 +237,7 @@ func queryServiceInstancesKvs(ctx context.Context, serviceId string, rev int64)
 		registry.WithPrefix(),
 		registry.WithRev(rev))
 	if err != nil {
-		log.Errorf(err, "query instance of service %s with revision %d from etcd failed.",
+		log.Errorf(err, "get service[%s]'s instances with revision %d failed",
 			serviceId, rev)
 		return nil, err
 	}
diff --git a/server/service/util/microservice_util.go b/server/service/util/microservice_util.go
index c54a0e19..23601226 100644
--- a/server/service/util/microservice_util.go
+++ b/server/service/util/microservice_util.go
@@ -91,8 +91,8 @@ func GetServiceId(ctx context.Context, key *pb.MicroServiceKey) (serviceId strin
 	}
 	if len(serviceId) == 0 {
 		// 别名查询
-		log.Debugf("could not search microservice %s/%s/%s id by field 'serviceName', now try field 'alias'.",
-			key.AppId, key.ServiceName, key.Version)
+		log.Debugf("could not search microservice[%s/%s/%s/%s] id by 'serviceName', now try 'alias'",
+			key.Environment, key.AppId, key.ServiceName, key.Version)
 		return searchServiceIdFromAlias(ctx, key)
 	}
 	return
@@ -212,7 +212,7 @@ func UpdateService(domainProject string, serviceId string, service *pb.MicroServ
 	key := apt.GenerateServiceKey(domainProject, serviceId)
 	data, err := json.Marshal(service)
 	if err != nil {
-		log.Errorf(err, "marshal service failed.")
+		log.Errorf(err, "marshal service file failed")
 		return
 	}
 	opt = registry.OpPut(registry.WithStrKey(key), registry.WithValue(data))
diff --git a/server/service/util/rule_util.go b/server/service/util/rule_util.go
index 50ecd21a..07d2824b 100644
--- a/server/service/util/rule_util.go
+++ b/server/service/util/rule_util.go
@@ -123,7 +123,7 @@ func GetServiceRuleType(ctx context.Context, domainProject string, serviceId str
 		registry.WithPrefix())
 	resp, err := backend.Store().Rule().Search(ctx, opts...)
 	if err != nil {
-		log.Errorf(err, "Get rule failed.%s", err.Error())
+		log.Errorf(err, "get service[%s] rule failed", serviceId)
 		return "", 0, err
 	}
 	if len(resp.Kvs) == 0 {
@@ -137,11 +137,11 @@ func GetOneRule(ctx context.Context, domainProject, serviceId, ruleId string) (*
 		registry.WithStrKey(apt.GenerateServiceRuleKey(domainProject, serviceId, ruleId)))
 	resp, err := backend.Store().Rule().Search(ctx, opts...)
 	if err != nil {
-		log.Errorf(nil, "Get rule for service failed for %s.", err.Error())
+		log.Errorf(err, "get service rule[%s/%s]", serviceId, ruleId)
 		return nil, err
 	}
 	if len(resp.Kvs) == 0 {
-		log.Errorf(nil, "Get rule failed, ruleId is %s.", ruleId)
+		log.Errorf(nil, "get service rule[%s/%s] failed", serviceId, ruleId)
 		return nil, nil
 	}
 	return resp.Kvs[0].Value.(*pb.ServiceRule), nil
@@ -194,8 +194,9 @@ func patternWhiteList(rulesOfProvider []*pb.ServiceRule, tagsOfConsumer map[stri
 
 		match, _ := regexp.MatchString(rule.Pattern, value)
 		if match {
-			log.Infof("consumer %s match white list, rule.Pattern is %s, value is %s",
-				consumerId, rule.Pattern, value)
+			log.Infof("consumer[%s][%s/%s/%s/%s] match white list, rule.Pattern is %s, value is %s",
+				consumerId, consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version,
+				rule.Pattern, value)
 			return nil
 		}
 	}
@@ -207,13 +208,13 @@ func parsePattern(v reflect.Value, rule *pb.ServiceRule, tagsOfConsumer map[stri
 		key := rule.Attribute[4:]
 		value := tagsOfConsumer[key]
 		if len(value) == 0 {
-			log.Infof("can not find service %s tag '%s'", consumerId, key)
+			log.Infof("can not find service[%s] tag[%s]", consumerId, key)
 		}
 		return value, nil
 	}
 	key := v.FieldByName(rule.Attribute)
 	if !key.IsValid() {
-		log.Errorf(nil, "can not find service %s field '%s', rule %s",
+		log.Errorf(nil, "can not find service[%] field[%s], ruleId is %s",
 			consumerId, rule.Attribute, rule.RuleId)
 		return "", scerr.NewErrorf(scerr.ErrInternal, "Can not find field '%s'", rule.Attribute)
 	}
@@ -236,8 +237,9 @@ func patternBlackList(rulesOfProvider []*pb.ServiceRule, tagsOfConsumer map[stri
 
 		match, _ := regexp.MatchString(rule.Pattern, value)
 		if match {
-			log.Warnf("no permission to access, consumer %s match black list, rule.Pattern is %s, value is %s",
-				consumerId, rule.Pattern, value)
+			log.Warnf("no permission to access, consumer[%s][%s/%s/%s/%s] match black list, rule.Pattern is %s, value is %s",
+				consumerId, consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version,
+				rule.Pattern, value)
 			return scerr.NewError(scerr.ErrPermissionDeny, "Found in black list")
 		}
 	}
diff --git a/server/service/util/tag_util.go b/server/service/util/tag_util.go
index 7e60d6a8..13d3a500 100644
--- a/server/service/util/tag_util.go
+++ b/server/service/util/tag_util.go
@@ -54,7 +54,7 @@ func GetTagsUtils(ctx context.Context, domainProject, serviceId string) (tags ma
 	opts := append(FromContext(ctx), registry.WithStrKey(key))
 	resp, err := backend.Store().ServiceTag().Search(ctx, opts...)
 	if err != nil {
-		log.Errorf(err, "get service %s tags file failed", key)
+		log.Errorf(err, "get service[%s] tags file failed", serviceId)
 		return tags, err
 	}
 
diff --git a/server/service/watch.go b/server/service/watch.go
index 0ceccaf8..f205755c 100644
--- a/server/service/watch.go
+++ b/server/service/watch.go
@@ -42,18 +42,18 @@ func (s *InstanceService) WatchPreOpera(ctx context.Context, in *pb.WatchInstanc
 func (s *InstanceService) Watch(in *pb.WatchInstanceRequest, stream pb.ServiceInstanceCtrl_WatchServer) error {
 	var err error
 	if err = s.WatchPreOpera(stream.Context(), in); err != nil {
-		log.Errorf(err, "establish watch failed: invalid params.")
+		log.Errorf(err, "service[%s] establish watch failed: invalid params", in.SelfServiceId)
 		return err
 	}
 	domainProject := util.ParseDomainProject(stream.Context())
 	watcher := nf.NewListWatcher(in.SelfServiceId, apt.GetInstanceRootKey(domainProject)+"/", nil)
 	err = nf.GetNotifyService().AddSubscriber(watcher)
-	log.Infof("start watch instance status, watcher %s %s", watcher.Subject(), watcher.Group())
+	log.Infof("watcher[%s/%s] start watch instance status", watcher.Subject(), watcher.Group())
 	return nf.HandleWatchJob(watcher, stream)
 }
 
 func (s *InstanceService) WebSocketWatch(ctx context.Context, in *pb.WatchInstanceRequest, conn *websocket.Conn) {
-	log.Infof("new a web socket watch with %s", in.SelfServiceId)
+	log.Infof("new a web socket watch with service[%s]", in.SelfServiceId)
 	if err := s.WatchPreOpera(ctx, in); err != nil {
 		nf.EstablishWebSocketError(conn, err)
 		return
@@ -62,7 +62,7 @@ func (s *InstanceService) WebSocketWatch(ctx context.Context, in *pb.WatchInstan
 }
 
 func (s *InstanceService) WebSocketListAndWatch(ctx context.Context, in *pb.WatchInstanceRequest, conn *websocket.Conn) {
-	log.Infof("new a web socket list and watch with %s", in.SelfServiceId)
+	log.Infof("new a web socket list and watch with service[%s]", in.SelfServiceId)
 	if err := s.WatchPreOpera(ctx, in); err != nil {
 		nf.EstablishWebSocketError(conn, err)
 		return


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> Bug fixes
> ---------
>
>                 Key: SCB-993
>                 URL: https://issues.apache.org/jira/browse/SCB-993
>             Project: Apache ServiceComb
>          Issue Type: Bug
>          Components: Service-Center
>            Reporter: little-cui
>            Assignee: little-cui
>            Priority: Major
>             Fix For: service-center-1.1.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)