You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2022/04/21 11:01:35 UTC

[dubbo-go] branch 3.0 updated: Fix: xds logs and typos (#1846)

This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new ae8893a54 Fix: xds logs and typos (#1846)
ae8893a54 is described below

commit ae8893a5479f552d7ec08e36a8770144bd838f4b
Author: Laurence <45...@users.noreply.github.com>
AuthorDate: Thu Apr 21 19:01:29 2022 +0800

    Fix: xds logs and typos (#1846)
---
 remoting/xds/client.go                             |  6 +--
 remoting/xds/client_test.go                        |  6 +--
 remoting/xds/error.go                              |  4 +-
 xds/balancer/cdsbalancer/cdsbalancer.go            | 20 +++++-----
 xds/balancer/cdsbalancer/logging.go                | 44 ----------------------
 xds/balancer/clusterimpl/clusterimpl.go            | 12 +++---
 xds/balancer/clusterimpl/logging.go                | 44 ----------------------
 xds/balancer/clusterimpl/picker.go                 |  3 +-
 .../clustermanager/balancerstateaggregator.go      |  6 +--
 xds/balancer/clustermanager/clustermanager.go      | 16 ++------
 xds/balancer/clusterresolver/clusterresolver.go    | 26 ++++++-------
 xds/balancer/clusterresolver/configbuilder.go      |  5 ++-
 xds/balancer/clusterresolver/logging.go            | 44 ----------------------
 xds/balancer/orca/orca.go                          |  9 ++---
 xds/balancer/priority/balancer.go                  |  6 +--
 xds/balancer/priority/balancer_child.go            |  2 +-
 xds/balancer/priority/balancer_priority.go         |  2 +-
 xds/balancer/priority/logging.go                   | 44 ----------------------
 xds/balancer/ringhash/logging.go                   | 18 ---------
 xds/balancer/ringhash/picker.go                    |  6 +--
 xds/balancer/ringhash/ringhash.go                  |  8 ++--
 xds/client/authority.go                            |  4 ++
 xds/client/bootstrap/bootstrap.go                  | 13 ++++---
 xds/client/bootstrap/logging.go                    | 10 -----
 xds/client/client.go                               |  6 +--
 xds/client/controller.go                           |  4 +-
 xds/client/controller/controller.go                | 20 +++++-----
 xds/client/controller/transport.go                 | 20 +++++-----
 xds/client/controller/version/v2/client.go         |  6 +--
 xds/client/controller/version/v3/client.go         |  6 +--
 xds/client/controller/version/version.go           |  4 +-
 xds/client/logging.go                              | 44 ----------------------
 xds/client/pubsub/pubsub.go                        |  6 +--
 xds/client/resource/filter_chain.go                | 16 ++++----
 xds/client/resource/unmarshal.go                   |  4 +-
 xds/client/resource/unmarshal_cds.go               |  6 +--
 xds/client/resource/unmarshal_eds.go               |  6 +--
 xds/client/resource/unmarshal_lds.go               | 12 +++---
 xds/client/resource/unmarshal_rds.go               | 14 +++----
 xds/csds/csds.go                                   | 12 +++---
 xds/resolver/logging.go                            | 44 ----------------------
 xds/resolver/watch_service.go                      |  6 +--
 xds/resolver/xds_resolver.go                       | 10 ++---
 xds/server/listener_wrapper.go                     | 24 +++++-------
 xds/utils/balancergroup/balancergroup.go           |  6 +--
 xds/utils/grpclog/grpclog.go                       |  4 +-
 xds/utils/grpclog/prefixLogger.go                  | 15 +-------
 xds/utils/serviceconfig/serviceconfig.go           |  8 ++--
 48 files changed, 173 insertions(+), 488 deletions(-)

diff --git a/remoting/xds/client.go b/remoting/xds/client.go
index 7bfec7c5e..448744eb7 100644
--- a/remoting/xds/client.go
+++ b/remoting/xds/client.go
@@ -414,7 +414,7 @@ func (w *WrappedClientImpl) startWatchingAllClusterAndLoadLocalHostAddrAndIstioP
 					for _, e := range v.Endpoints {
 						w.istiodPodIP = xdsCommon.NewHostNameOrIPAddr(e.Address).HostnameOrIP
 						foundIstiod = true
-						close(foundLocalStopCh)
+						close(foundIstiodStopCh)
 					}
 				}
 			})
@@ -432,7 +432,7 @@ func (w *WrappedClientImpl) startWatchingAllClusterAndLoadLocalHostAddrAndIstioP
 						cluster := xdsCommon.NewCluster(update.ClusterName)
 						w.hostAddr = cluster.Addr
 						foundLocal = true
-						close(foundIstiodStopCh)
+						close(foundLocalStopCh)
 					}
 				}
 			}
@@ -463,7 +463,7 @@ func (w *WrappedClientImpl) startWatchingAllClusterAndLoadLocalHostAddrAndIstioP
 		case <-foundIstiodStopCh:
 			return DiscoverLocalError
 		default:
-			return DiscoverIstioPodError
+			return DiscoverIstiodPodError
 		}
 	}
 }
diff --git a/remoting/xds/client_test.go b/remoting/xds/client_test.go
index 254fd5f02..dea3a9f43 100644
--- a/remoting/xds/client_test.go
+++ b/remoting/xds/client_test.go
@@ -250,7 +250,7 @@ func testFailedWithIstioCDS(t *testing.T) {
 		return mockXDSClient, nil
 	}
 	xdsWrappedClient, err := NewXDSWrappedClient(podNameFoo, localNamespaceFoo, localIPFoo, common.NewHostNameOrIPAddr(istioHostAddrFoo))
-	assert.Equal(t, DiscoverIstioPodError, err)
+	assert.Equal(t, DiscoverIstiodPodError, err)
 	assert.Nil(t, xdsWrappedClient)
 	assert.Equal(t, int32(1), cancelCalledCounter.Load())
 }
@@ -400,7 +400,7 @@ func testFailedWithNoneCDS(t *testing.T) {
 		return mockXDSClient, nil
 	}
 	xdsWrappedClient, err := NewXDSWrappedClient(podNameFoo, localNamespaceFoo, localIPFoo, common.NewHostNameOrIPAddr(istioHostAddrFoo))
-	assert.Equal(t, DiscoverIstioPodError, err)
+	assert.Equal(t, DiscoverIstiodPodError, err)
 	assert.Nil(t, xdsWrappedClient)
 	assert.Equal(t, int32(0), cancelCalledCounter.Load())
 }
@@ -550,7 +550,7 @@ func testFailedWithIstioEDSFailed(t *testing.T) {
 		return mockXDSClient, nil
 	}
 	xdsWrappedClient, err := NewXDSWrappedClient(podNameFoo, localNamespaceFoo, localIPFoo, common.NewHostNameOrIPAddr(istioHostAddrFoo))
-	assert.Equal(t, DiscoverIstioPodError, err)
+	assert.Equal(t, DiscoverIstiodPodError, err)
 	assert.Nil(t, xdsWrappedClient)
 	assert.Equal(t, int32(2), cancelCalledCounter.Load())
 }
diff --git a/remoting/xds/error.go b/remoting/xds/error.go
index ca81febdf..84325bc5f 100644
--- a/remoting/xds/error.go
+++ b/remoting/xds/error.go
@@ -22,6 +22,6 @@ import (
 )
 
 var (
-	DiscoverLocalError    = errors.New("Discovery local Pod's host from xds failed, please register service with endpoint to k8s")
-	DiscoverIstioPodError = errors.New("Discovery local Pod's host from xds failed, please register service with endpoint to k8s")
+	DiscoverLocalError     = errors.New("Discovery local Pod's host from xds, failed please register service with endpoint to k8s ")
+	DiscoverIstiodPodError = errors.New("Discovery istiod Pod's host from xds failed, please register service with endpoint to k8s ")
 )
diff --git a/xds/balancer/cdsbalancer/cdsbalancer.go b/xds/balancer/cdsbalancer/cdsbalancer.go
index 753a7d63e..3907a795e 100644
--- a/xds/balancer/cdsbalancer/cdsbalancer.go
+++ b/xds/balancer/cdsbalancer/cdsbalancer.go
@@ -45,13 +45,13 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/balancer/clusterresolver"
 	"dubbo.apache.org/dubbo-go/v3/xds/balancer/ringhash"
 	"dubbo.apache.org/dubbo-go/v3/xds/client"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/buffer"
 	xdsinternal "dubbo.apache.org/dubbo-go/v3/xds/utils/credentials/xds"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpcsync"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 	internalserviceconfig "dubbo.apache.org/dubbo-go/v3/xds/utils/serviceconfig"
@@ -97,7 +97,7 @@ func (bb) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Bal
 		done:     grpcsync.NewEvent(),
 		xdsHI:    xdsinternal.NewHandshakeInfo(nil, nil),
 	}
-	b.logger = prefixLogger((b))
+	b.logger = dubboLogger.GetLogger()
 	b.logger.Infof("Created")
 	var creds credentials.TransportCredentials
 	switch {
@@ -172,7 +172,7 @@ type cdsBalancer struct {
 	xdsClient      client.XDSClient      // xDS client to watch Cluster resource.
 	clusterHandler *clusterHandler       // To watch the clusters.
 	childLB        balancer.Balancer
-	logger         *grpclog.PrefixLogger
+	logger         dubboLogger.Logger
 	closed         *grpcsync.Event
 	done           *grpcsync.Event
 
@@ -290,7 +290,7 @@ func buildProviderFunc(configs map[string]*certprovider.BuildableConfig, instanc
 // lead to clientConn updates being invoked on the underlying cluster_resolver balancer.
 func (b *cdsBalancer) handleWatchUpdate(update clusterHandlerUpdate) {
 	if err := update.err; err != nil {
-		b.logger.Warningf("Watch error from xds-client %p: %v", b.xdsClient, err)
+		b.logger.Warnf("Watch error from xds-client %p: %v", b.xdsClient, err)
 		b.handleErrorFromUpdate(err, false)
 		return
 	}
@@ -306,7 +306,7 @@ func (b *cdsBalancer) handleWatchUpdate(update clusterHandlerUpdate) {
 		// If the security config is invalid, for example, if the provider
 		// instance is not found in the bootstrap config, we need to put the
 		// channel in transient failure.
-		b.logger.Warningf("Invalid security config update from xds-client %p: %v", b.xdsClient, err)
+		b.logger.Warnf("Invalid security config update from xds-client %p: %v", b.xdsClient, err)
 		b.handleErrorFromUpdate(err, false)
 		return
 	}
@@ -471,7 +471,7 @@ func (b *cdsBalancer) handleErrorFromUpdate(err error, fromParent bool) {
 // xdsResolver.
 func (b *cdsBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received ClientConnState {%+v} after cdsBalancer was closed", state)
+		b.logger.Warnf("xds: received ClientConnState {%+v} after cdsBalancer was closed", state)
 		return errBalancerClosed
 	}
 
@@ -489,11 +489,11 @@ func (b *cdsBalancer) UpdateClientConnState(state balancer.ClientConnState) erro
 	// something that is received on the wire.
 	lbCfg, ok := state.BalancerConfig.(*lbConfig)
 	if !ok {
-		b.logger.Warningf("xds: unexpected LoadBalancingConfig type: %T", state.BalancerConfig)
+		b.logger.Warnf("xds: unexpected LoadBalancingConfig type: %T", state.BalancerConfig)
 		return balancer.ErrBadResolverState
 	}
 	if lbCfg.ClusterName == "" {
-		b.logger.Warningf("xds: no clusterName found in LoadBalancingConfig: %+v", lbCfg)
+		b.logger.Warnf("xds: no clusterName found in LoadBalancingConfig: %+v", lbCfg)
 		return balancer.ErrBadResolverState
 	}
 	b.updateCh.Put(&ccUpdate{clusterName: lbCfg.ClusterName})
@@ -503,7 +503,7 @@ func (b *cdsBalancer) UpdateClientConnState(state balancer.ClientConnState) erro
 // ResolverError handles errors reported by the xdsResolver.
 func (b *cdsBalancer) ResolverError(err error) {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received resolver error {%v} after cdsBalancer was closed", err)
+		b.logger.Warnf("xds: received resolver error {%v} after cdsBalancer was closed", err)
 		return
 	}
 	b.updateCh.Put(&ccUpdate{err: err})
@@ -512,7 +512,7 @@ func (b *cdsBalancer) ResolverError(err error) {
 // UpdateSubConnState handles subConn updates from gRPC.
 func (b *cdsBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received subConn update {%v, %v} after cdsBalancer was closed", sc, state)
+		b.logger.Warnf("xds: received subConn update {%v, %v} after cdsBalancer was closed", sc, state)
 		return
 	}
 	b.updateCh.Put(&scUpdate{subConn: sc, state: state})
diff --git a/xds/balancer/cdsbalancer/logging.go b/xds/balancer/cdsbalancer/logging.go
deleted file mode 100644
index c1a673a7a..000000000
--- a/xds/balancer/cdsbalancer/logging.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- */
-
-package cdsbalancer
-
-import (
-	"fmt"
-)
-
-import (
-	"google.golang.org/grpc/grpclog"
-)
-
-import (
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
-)
-
-const prefix = "[cds-lb %p] "
-
-var logger = grpclog.Component("xds")
-
-func prefixLogger(p *cdsBalancer) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(prefix, p))
-}
diff --git a/xds/balancer/clusterimpl/clusterimpl.go b/xds/balancer/clusterimpl/clusterimpl.go
index 61ae145b1..c18c9a412 100644
--- a/xds/balancer/clusterimpl/clusterimpl.go
+++ b/xds/balancer/clusterimpl/clusterimpl.go
@@ -46,13 +46,13 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	internal "dubbo.apache.org/dubbo-go/v3/xds"
 	"dubbo.apache.org/dubbo-go/v3/xds/balancer/loadstore"
 	"dubbo.apache.org/dubbo-go/v3/xds/client"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/load"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/buffer"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpcsync"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
@@ -80,7 +80,7 @@ func (bb) Build(cc balancer.ClientConn, bOpts balancer.BuildOptions) balancer.Ba
 		pickerUpdateCh:  buffer.NewUnbounded(),
 		requestCountMax: defaultRequestCountMax,
 	}
-	b.logger = prefixLogger(b)
+	b.logger = dubboLogger.GetLogger()
 	go b.run()
 	b.logger.Infof("Created")
 	return b
@@ -110,7 +110,7 @@ type clusterImplBalancer struct {
 	done   *grpcsync.Event
 
 	bOpts     balancer.BuildOptions
-	logger    *grpclog.PrefixLogger
+	logger    dubboLogger.Logger
 	xdsClient client.XDSClient
 
 	config           *LBConfig
@@ -229,7 +229,7 @@ func (b *clusterImplBalancer) updateLoadStore(newConfig *LBConfig) error {
 
 func (b *clusterImplBalancer) UpdateClientConnState(s balancer.ClientConnState) error {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received ClientConnState {%+v} after clusterImplBalancer was closed", s)
+		b.logger.Warnf("xds: received ClientConnState {%+v} after clusterImplBalancer was closed", s)
 		return nil
 	}
 
@@ -295,7 +295,7 @@ func (b *clusterImplBalancer) UpdateClientConnState(s balancer.ClientConnState)
 
 func (b *clusterImplBalancer) ResolverError(err error) {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received resolver error {%+v} after clusterImplBalancer was closed", err)
+		b.logger.Warnf("xds: received resolver error {%+v} after clusterImplBalancer was closed", err)
 		return
 	}
 
@@ -306,7 +306,7 @@ func (b *clusterImplBalancer) ResolverError(err error) {
 
 func (b *clusterImplBalancer) UpdateSubConnState(sc balancer.SubConn, s balancer.SubConnState) {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received subconn state change {%+v, %+v} after clusterImplBalancer was closed", sc, s)
+		b.logger.Warnf("xds: received subconn state change {%+v, %+v} after clusterImplBalancer was closed", sc, s)
 		return
 	}
 
diff --git a/xds/balancer/clusterimpl/logging.go b/xds/balancer/clusterimpl/logging.go
deleted file mode 100644
index 3fba05176..000000000
--- a/xds/balancer/clusterimpl/logging.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- */
-
-package clusterimpl
-
-import (
-	"fmt"
-)
-
-import (
-	"google.golang.org/grpc/grpclog"
-)
-
-import (
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
-)
-
-const prefix = "[xds-cluster-impl-lb %p] "
-
-var logger = grpclog.Component("xds")
-
-func prefixLogger(p *clusterImplBalancer) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(prefix, p))
-}
diff --git a/xds/balancer/clusterimpl/picker.go b/xds/balancer/clusterimpl/picker.go
index afcd8b3a4..95a1f7d8a 100644
--- a/xds/balancer/clusterimpl/picker.go
+++ b/xds/balancer/clusterimpl/picker.go
@@ -36,6 +36,7 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/load"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/wrr"
@@ -149,7 +150,7 @@ func (d *picker) Pick(info balancer.PickInfo) (balancer.PickResult, error) {
 		// be used.
 		lIDStr, e = scw.localityID().ToString()
 		if e != nil {
-			logger.Infof("failed to marshal LocalityID: %#v, loads won't be reported", scw.localityID())
+			dubboLogger.Infof("failed to marshal LocalityID: %#v, loads won't be reported", scw.localityID())
 		}
 	}
 
diff --git a/xds/balancer/clustermanager/balancerstateaggregator.go b/xds/balancer/clustermanager/balancerstateaggregator.go
index 8261d90a6..b735cc35b 100644
--- a/xds/balancer/clustermanager/balancerstateaggregator.go
+++ b/xds/balancer/clustermanager/balancerstateaggregator.go
@@ -36,7 +36,7 @@ import (
 )
 
 import (
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 )
 
 type subBalancerState struct {
@@ -55,7 +55,7 @@ func (s *subBalancerState) String() string {
 
 type balancerStateAggregator struct {
 	cc     balancer.ClientConn
-	logger *grpclog.PrefixLogger
+	logger dubboLogger.Logger
 
 	mu sync.Mutex
 	// If started is false, no updates should be sent to the parent cc. A closed
@@ -70,7 +70,7 @@ type balancerStateAggregator struct {
 	idToPickerState map[string]*subBalancerState
 }
 
-func newBalancerStateAggregator(cc balancer.ClientConn, logger *grpclog.PrefixLogger) *balancerStateAggregator {
+func newBalancerStateAggregator(cc balancer.ClientConn, logger dubboLogger.Logger) *balancerStateAggregator {
 	return &balancerStateAggregator{
 		cc:              cc,
 		logger:          logger,
diff --git a/xds/balancer/clustermanager/clustermanager.go b/xds/balancer/clustermanager/clustermanager.go
index 41c63151f..989da2c18 100644
--- a/xds/balancer/clustermanager/clustermanager.go
+++ b/xds/balancer/clustermanager/clustermanager.go
@@ -32,16 +32,14 @@ import (
 import (
 	"google.golang.org/grpc/balancer"
 
-	"google.golang.org/grpc/grpclog"
-
 	"google.golang.org/grpc/resolver"
 
 	"google.golang.org/grpc/serviceconfig"
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/balancergroup"
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/hierarchy"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
@@ -56,7 +54,7 @@ type bb struct{}
 
 func (bb) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer {
 	b := &bal{}
-	b.logger = prefixLogger(b)
+	b.logger = dubboLogger.GetLogger()
 	b.stateAggregator = newBalancerStateAggregator(cc, b.logger)
 	b.stateAggregator.start()
 	b.bg = balancergroup.New(cc, opts, b.stateAggregator, b.logger)
@@ -74,7 +72,7 @@ func (bb) ParseConfig(c json.RawMessage) (serviceconfig.LoadBalancingConfig, err
 }
 
 type bal struct {
-	logger *internalgrpclog.PrefixLogger
+	logger dubboLogger.Logger
 
 	// TODO: make this package not dependent on xds specific code. Same as for
 	// weighted target balancer.
@@ -152,11 +150,3 @@ func (b *bal) Close() {
 func (b *bal) ExitIdle() {
 	b.bg.ExitIdle()
 }
-
-const prefix = "[xds-cluster-manager-lb %p] "
-
-var logger = grpclog.Component("xds")
-
-func prefixLogger(p *bal) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(prefix, p))
-}
diff --git a/xds/balancer/clusterresolver/clusterresolver.go b/xds/balancer/clusterresolver/clusterresolver.go
index b53136803..ca6ee604e 100644
--- a/xds/balancer/clusterresolver/clusterresolver.go
+++ b/xds/balancer/clusterresolver/clusterresolver.go
@@ -44,11 +44,11 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/balancer/priority"
 	"dubbo.apache.org/dubbo-go/v3/xds/client"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/buffer"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpcsync"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
@@ -73,12 +73,12 @@ type bb struct{}
 func (bb) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer {
 	priorityBuilder := balancer.Get(priority.Name)
 	if priorityBuilder == nil {
-		logger.Errorf("priority balancer is needed but not registered")
+		dubboLogger.Errorf("priority balancer is needed but not registered")
 		return nil
 	}
 	priorityConfigParser, ok := priorityBuilder.(balancer.ConfigParser)
 	if !ok {
-		logger.Errorf("priority balancer builder is not a config parser")
+		dubboLogger.Errorf("priority balancer builder is not a config parser")
 		return nil
 	}
 
@@ -91,7 +91,7 @@ func (bb) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Bal
 		priorityBuilder:      priorityBuilder,
 		priorityConfigParser: priorityConfigParser,
 	}
-	b.logger = prefixLogger(b)
+	b.logger = dubboLogger.GetLogger()
 	b.logger.Infof("Created")
 
 	b.resourceWatcher = newResourceResolver(b)
@@ -141,7 +141,7 @@ type clusterResolverBalancer struct {
 	bOpts           balancer.BuildOptions
 	updateCh        *buffer.Unbounded // Channel for updates from gRPC.
 	resourceWatcher *resourceResolver
-	logger          *grpclog.PrefixLogger
+	logger          dubboLogger.Logger
 	closed          *grpcsync.Event
 	done            *grpcsync.Event
 
@@ -173,7 +173,7 @@ func (b *clusterResolverBalancer) handleClientConnUpdate(update *ccUpdate) {
 	b.logger.Infof("Receive update from resolver, balancer config: %v", pretty.ToJSON(update.state.BalancerConfig))
 	cfg, _ := update.state.BalancerConfig.(*LBConfig)
 	if cfg == nil {
-		b.logger.Warningf("xds: unexpected LoadBalancingConfig type: %T", update.state.BalancerConfig)
+		b.logger.Warnf("xds: unexpected LoadBalancingConfig type: %T", update.state.BalancerConfig)
 		return
 	}
 
@@ -189,7 +189,7 @@ func (b *clusterResolverBalancer) handleClientConnUpdate(update *ccUpdate) {
 	// need to generate a new balancer config and send it to the child, because
 	// certain fields (unrelated to EDS watch) might have changed.
 	if err := b.updateChildConfig(); err != nil {
-		b.logger.Warningf("failed to update child policy config: %v", err)
+		b.logger.Warnf("failed to update child policy config: %v", err)
 	}
 }
 
@@ -197,7 +197,7 @@ func (b *clusterResolverBalancer) handleClientConnUpdate(update *ccUpdate) {
 // lead to clientConn updates being invoked on the underlying child balancer.
 func (b *clusterResolverBalancer) handleWatchUpdate(update *resourceUpdate) {
 	if err := update.err; err != nil {
-		b.logger.Warningf("Watch error from xds-client %p: %v", b.xdsClient, err)
+		b.logger.Warnf("Watch error from xds-client %p: %v", b.xdsClient, err)
 		b.handleErrorFromUpdate(err, false)
 		return
 	}
@@ -210,7 +210,7 @@ func (b *clusterResolverBalancer) handleWatchUpdate(update *resourceUpdate) {
 	// for the priority balancer), and new addresses (the endpoints come from
 	// the EDS response).
 	if err := b.updateChildConfig(); err != nil {
-		b.logger.Warningf("failed to update child policy's balancer config: %v", err)
+		b.logger.Warnf("failed to update child policy's balancer config: %v", err)
 	}
 }
 
@@ -258,7 +258,7 @@ func (b *clusterResolverBalancer) updateChildConfig() error {
 // watcher should keep watching.
 // In both cases, the sub-balancers will be receive the error.
 func (b *clusterResolverBalancer) handleErrorFromUpdate(err error, fromParent bool) {
-	b.logger.Warningf("Received error: %v", err)
+	b.logger.Warnf("Received error: %v", err)
 	if fromParent && resource.ErrType(err) == resource.ErrorTypeResourceNotFound {
 		// This is an error from the parent ClientConn (can be the parent CDS
 		// balancer), and is a resource-not-found error. This means the resource
@@ -336,7 +336,7 @@ func (b *clusterResolverBalancer) run() {
 // xdsResolver.
 func (b *clusterResolverBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received ClientConnState {%+v} after clusterResolverBalancer was closed", state)
+		b.logger.Warnf("xds: received ClientConnState {%+v} after clusterResolverBalancer was closed", state)
 		return errBalancerClosed
 	}
 
@@ -356,7 +356,7 @@ func (b *clusterResolverBalancer) UpdateClientConnState(state balancer.ClientCon
 // ResolverError handles errors reported by the xdsResolver.
 func (b *clusterResolverBalancer) ResolverError(err error) {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received resolver error {%v} after clusterResolverBalancer was closed", err)
+		b.logger.Warnf("xds: received resolver error {%v} after clusterResolverBalancer was closed", err)
 		return
 	}
 	b.updateCh.Put(&ccUpdate{err: err})
@@ -365,7 +365,7 @@ func (b *clusterResolverBalancer) ResolverError(err error) {
 // UpdateSubConnState handles subConn updates from gRPC.
 func (b *clusterResolverBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) {
 	if b.closed.HasFired() {
-		b.logger.Warningf("xds: received subConn update {%v, %v} after clusterResolverBalancer was closed", sc, state)
+		b.logger.Warnf("xds: received subConn update {%v, %v} after clusterResolverBalancer was closed", sc, state)
 		return
 	}
 	b.updateCh.Put(&scUpdate{subConn: sc, state: state})
diff --git a/xds/balancer/clusterresolver/configbuilder.go b/xds/balancer/clusterresolver/configbuilder.go
index a9397f487..9c3985bbe 100644
--- a/xds/balancer/clusterresolver/configbuilder.go
+++ b/xds/balancer/clusterresolver/configbuilder.go
@@ -38,6 +38,7 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/balancer/clusterimpl"
 	"dubbo.apache.org/dubbo-go/v3/xds/balancer/priority"
 	"dubbo.apache.org/dubbo-go/v3/xds/balancer/ringhash"
@@ -276,7 +277,7 @@ func priorityLocalitiesToClusterImpl(localities []resource.Locality, priorityNam
 		// If lb policy is ROUND_ROBIN:
 		// - locality-picking policy is weighted_target
 		// - endpoint-picking policy is round_robin
-		logger.Infof("xds lb policy is %q, building config with weighted_target + round_robin", rrName)
+		dubboLogger.Infof("xds lb policy is %q, building config with weighted_target + round_robin", rrName)
 		// Child of weighted_target is hardcoded to round_robin.
 		wtConfig, addrs := localitiesToWeightedTarget(localities, priorityName, rrBalancerConfig)
 		clusterImplCfg.ChildPolicy = &internalserviceconfig.BalancerConfig{Name: weightedtarget.Name, Config: wtConfig}
@@ -287,7 +288,7 @@ func priorityLocalitiesToClusterImpl(localities []resource.Locality, priorityNam
 		// If lb policy is RIHG_HASH, will build one ring_hash policy as child.
 		// The endpoints from all localities will be flattened to one addresses
 		// list, and the ring_hash policy will pick endpoints from it.
-		logger.Infof("xds lb policy is %q, building config with ring_hash", rhName)
+		dubboLogger.Infof("xds lb policy is %q, building config with ring_hash", rhName)
 		addrs := localitiesToRingHash(localities, priorityName)
 		// Set child to ring_hash, note that the ring_hash config is from
 		// xdsLBPolicy.
diff --git a/xds/balancer/clusterresolver/logging.go b/xds/balancer/clusterresolver/logging.go
deleted file mode 100644
index c9822dae7..000000000
--- a/xds/balancer/clusterresolver/logging.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- */
-
-package clusterresolver
-
-import (
-	"fmt"
-)
-
-import (
-	"google.golang.org/grpc/grpclog"
-)
-
-import (
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
-)
-
-const prefix = "[xds-cluster-resolver-lb %p] "
-
-var logger = grpclog.Component("xds")
-
-func prefixLogger(p *clusterResolverBalancer) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(prefix, p))
-}
diff --git a/xds/balancer/orca/orca.go b/xds/balancer/orca/orca.go
index 4e78f1424..4ce9ec845 100644
--- a/xds/balancer/orca/orca.go
+++ b/xds/balancer/orca/orca.go
@@ -29,19 +29,16 @@ import (
 
 	"github.com/golang/protobuf/proto"
 
-	"google.golang.org/grpc/grpclog"
-
 	"google.golang.org/grpc/metadata"
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/balancerload"
 )
 
 const mdKey = "X-Endpoint-Load-Metrics-Bin"
 
-var logger = grpclog.Component("xds")
-
 // toBytes converts a orca load report into bytes.
 func toBytes(r *orcapb.OrcaLoadReport) []byte {
 	if r == nil {
@@ -50,7 +47,7 @@ func toBytes(r *orcapb.OrcaLoadReport) []byte {
 
 	b, err := proto.Marshal(r)
 	if err != nil {
-		logger.Warningf("orca: failed to marshal load report: %v", err)
+		logger.Warnf("orca: failed to marshal load report: %v", err)
 		return nil
 	}
 	return b
@@ -69,7 +66,7 @@ func ToMetadata(r *orcapb.OrcaLoadReport) metadata.MD {
 func fromBytes(b []byte) *orcapb.OrcaLoadReport {
 	ret := new(orcapb.OrcaLoadReport)
 	if err := proto.Unmarshal(b, ret); err != nil {
-		logger.Warningf("orca: failed to unmarshal load report: %v", err)
+		logger.Warnf("orca: failed to unmarshal load report: %v", err)
 		return nil
 	}
 	return ret
diff --git a/xds/balancer/priority/balancer.go b/xds/balancer/priority/balancer.go
index 99eb57162..76bacd4c7 100644
--- a/xds/balancer/priority/balancer.go
+++ b/xds/balancer/priority/balancer.go
@@ -44,9 +44,9 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/balancergroup"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/buffer"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpcsync"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/hierarchy"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
@@ -70,7 +70,7 @@ func (bb) Build(cc balancer.ClientConn, bOpts balancer.BuildOptions) balancer.Ba
 		childBalancerStateUpdate: buffer.NewUnbounded(),
 	}
 
-	b.logger = prefixLogger(b)
+	b.logger = dubboLogger.GetLogger()
 	b.bg = balancergroup.New(cc, bOpts, b, b.logger)
 	b.bg.Start()
 	go b.run()
@@ -94,7 +94,7 @@ type timerWrapper struct {
 }
 
 type priorityBalancer struct {
-	logger                   *grpclog.PrefixLogger
+	logger                   dubboLogger.Logger
 	cc                       balancer.ClientConn
 	bg                       *balancergroup.BalancerGroup
 	done                     *grpcsync.Event
diff --git a/xds/balancer/priority/balancer_child.go b/xds/balancer/priority/balancer_child.go
index d7414c25a..75561be1d 100644
--- a/xds/balancer/priority/balancer_child.go
+++ b/xds/balancer/priority/balancer_child.go
@@ -98,7 +98,7 @@ func (cb *childBalancer) sendUpdate() {
 		BalancerConfig: cb.config,
 	})
 	if err != nil {
-		cb.parent.logger.Warningf("failed to update ClientConn state for child %v: %v", cb.name, err)
+		cb.parent.logger.Warnf("failed to update ClientConn state for child %v: %v", cb.name, err)
 	}
 }
 
diff --git a/xds/balancer/priority/balancer_priority.go b/xds/balancer/priority/balancer_priority.go
index eafdbf2da..d7c9c58dd 100644
--- a/xds/balancer/priority/balancer_priority.go
+++ b/xds/balancer/priority/balancer_priority.go
@@ -219,7 +219,7 @@ func (b *priorityBalancer) handleChildStateUpdate(childName string, s balancer.S
 		// Lower priorities should all be closed, this is an unexpected update.
 		// Can happen if the child policy sends an update after we tell it to
 		// close.
-		b.logger.Warningf("priority: received picker update from priority %v,  lower than priority in use %v", priority, b.priorityInUse)
+		b.logger.Warnf("priority: received picker update from priority %v,  lower than priority in use %v", priority, b.priorityInUse)
 		return
 	}
 
diff --git a/xds/balancer/priority/logging.go b/xds/balancer/priority/logging.go
deleted file mode 100644
index 438f03da8..000000000
--- a/xds/balancer/priority/logging.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-/*
- *
- * Copyright 2021 gRPC authors.
- *
- */
-
-package priority
-
-import (
-	"fmt"
-)
-
-import (
-	"google.golang.org/grpc/grpclog"
-)
-
-import (
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
-)
-
-const prefix = "[priority-lb %p] "
-
-var logger = grpclog.Component("xds")
-
-func prefixLogger(p *priorityBalancer) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(prefix, p))
-}
diff --git a/xds/balancer/ringhash/logging.go b/xds/balancer/ringhash/logging.go
index 56e896ced..9192fbbce 100644
--- a/xds/balancer/ringhash/logging.go
+++ b/xds/balancer/ringhash/logging.go
@@ -23,22 +23,4 @@
 
 package ringhash
 
-import (
-	"fmt"
-)
-
-import (
-	"google.golang.org/grpc/grpclog"
-)
-
-import (
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
-)
-
 const prefix = "[ring-hash-lb %p] "
-
-var logger = grpclog.Component("xds")
-
-func prefixLogger(p *ringhashBalancer) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(prefix, p))
-}
diff --git a/xds/balancer/ringhash/picker.go b/xds/balancer/ringhash/picker.go
index b004e3a4b..1d62e5a13 100644
--- a/xds/balancer/ringhash/picker.go
+++ b/xds/balancer/ringhash/picker.go
@@ -38,15 +38,15 @@ import (
 )
 
 import (
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 )
 
 type picker struct {
 	ring   *ring
-	logger *grpclog.PrefixLogger
+	logger dubboLogger.Logger
 }
 
-func newPicker(ring *ring, logger *grpclog.PrefixLogger) *picker {
+func newPicker(ring *ring, logger dubboLogger.Logger) *picker {
 	return &picker{ring: ring, logger: logger}
 }
 
diff --git a/xds/balancer/ringhash/ringhash.go b/xds/balancer/ringhash/ringhash.go
index 76ff0725d..6ee145d09 100644
--- a/xds/balancer/ringhash/ringhash.go
+++ b/xds/balancer/ringhash/ringhash.go
@@ -44,7 +44,7 @@ import (
 )
 
 import (
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
 
@@ -64,7 +64,7 @@ func (bb) Build(cc balancer.ClientConn, bOpts balancer.BuildOptions) balancer.Ba
 		scStates: make(map[balancer.SubConn]*subConn),
 		csEvltr:  &connectivityStateEvaluator{},
 	}
-	b.logger = prefixLogger(b)
+	b.logger = dubboLogger.GetLogger()
 	b.logger.Infof("Created")
 	return b
 }
@@ -173,7 +173,7 @@ func (sc *subConn) queueConnect() {
 
 type ringhashBalancer struct {
 	cc     balancer.ClientConn
-	logger *grpclog.PrefixLogger
+	logger dubboLogger.Logger
 
 	config *LBConfig
 
@@ -231,7 +231,7 @@ func (b *ringhashBalancer) updateAddresses(addrs []resolver.Address) bool {
 			// (like creds) will be used.
 			sc, err := b.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{HealthCheckEnabled: true})
 			if err != nil {
-				logger.Warningf("base.baseBalancer: failed to create new SubConn: %v", err)
+				dubboLogger.Warnf("base.baseBalancer: failed to create new SubConn: %v", err)
 				continue
 			}
 			scs := &subConn{addr: a.Addr, sc: sc}
diff --git a/xds/client/authority.go b/xds/client/authority.go
index 518d04dfc..e15580f6e 100644
--- a/xds/client/authority.go
+++ b/xds/client/authority.go
@@ -33,6 +33,7 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/bootstrap"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/load"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/pubsub"
@@ -71,6 +72,9 @@ func (c *clientImpl) findAuthority(n *resource.Name) (_ *authority, unref func()
 
 	a, err := c.newAuthority(config)
 	if err != nil {
+		dubboLogger.Errorf(`[XDS Authority] new authority failed with error = %s, please makesure you have imported 
+	_ "dubbo.apache.org/dubbo-go/v3/xds/client/controller/version/v2"
+	_ "dubbo.apache.org/dubbo-go/v3/xds/client/controller/version/v3"`, err)
 		return nil, nil, fmt.Errorf("xds: failed to connect to the control plane for authority %q: %v", authority, err)
 	}
 	// All returned authority from this function will be used by a watch,
diff --git a/xds/client/bootstrap/bootstrap.go b/xds/client/bootstrap/bootstrap.go
index de80feb99..ebb76ba85 100644
--- a/xds/client/bootstrap/bootstrap.go
+++ b/xds/client/bootstrap/bootstrap.go
@@ -47,6 +47,7 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource/version"
 	internal2 "dubbo.apache.org/dubbo-go/v3/xds/internal"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/envconfig"
@@ -274,7 +275,7 @@ func bootstrapConfigFromEnvVariable() ([]byte, error) {
 		//
 		// Note that even if the content is invalid, we don't failover to the
 		// file content env variable.
-		logger.Debugf("xds: using bootstrap file with name %q", fName)
+		dubboLogger.Debugf("xds: using bootstrap file with name %q", fName)
 		return bootstrapFileReadFunc(fName)
 	}
 
@@ -304,7 +305,7 @@ func NewConfig() (*Config, error) {
 	if err != nil {
 		return nil, fmt.Errorf("xds: Failed to read bootstrap config: %v", err)
 	}
-	logger.Debugf("Bootstrap content: %s", data)
+	dubboLogger.Debugf("Bootstrap content: %s", data)
 	return NewConfigFromContents(data)
 }
 
@@ -373,7 +374,7 @@ func NewConfigFromContents(data []byte) (*Config, error) {
 			}
 		case "client_default_listener_resource_name_template":
 			if !envconfig.XDSFederation {
-				logger.Warningf("xds: bootstrap field %v is not support when Federation is disabled", k)
+				dubboLogger.Warnf("xds: bootstrap field %v is not support when Federation is disabled", k)
 				continue
 			}
 			if err := json.Unmarshal(v, &config.ClientDefaultListenerResourceNameTemplate); err != nil {
@@ -381,14 +382,14 @@ func NewConfigFromContents(data []byte) (*Config, error) {
 			}
 		case "authorities":
 			if !envconfig.XDSFederation {
-				logger.Warningf("xds: bootstrap field %v is not support when Federation is disabled", k)
+				dubboLogger.Warnf("xds: bootstrap field %v is not support when Federation is disabled", k)
 				continue
 			}
 			if err := json.Unmarshal(v, &config.Authorities); err != nil {
 				return nil, fmt.Errorf("xds: json.Unmarshal(%v) for field %q failed during bootstrap: %v", string(v), k, err)
 			}
 		default:
-			logger.Warningf("Bootstrap content has unknown field: %s", k)
+			dubboLogger.Warnf("Bootstrap content has unknown field: %s", k)
 		}
 		// Do not fail the xDS bootstrap when an unknown field is seen. This can
 		// happen when an older version client reads a newer version bootstrap
@@ -425,7 +426,7 @@ func NewConfigFromContents(data []byte) (*Config, error) {
 	if err := config.updateNodeProto(node); err != nil {
 		return nil, err
 	}
-	logger.Infof("Bootstrap config for creating xds-client: %v", pretty.ToJSON(config))
+	dubboLogger.Infof("Bootstrap config for creating xds-client: %v", pretty.ToJSON(config))
 	return config, nil
 }
 
diff --git a/xds/client/bootstrap/logging.go b/xds/client/bootstrap/logging.go
index 0dc023e25..530f1a528 100644
--- a/xds/client/bootstrap/logging.go
+++ b/xds/client/bootstrap/logging.go
@@ -23,14 +23,4 @@
 
 package bootstrap
 
-import (
-	"google.golang.org/grpc/grpclog"
-)
-
-import (
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
-)
-
 const prefix = "[xds-bootstrap] "
-
-var logger = internalgrpclog.NewPrefixLogger(grpclog.Component("xds"), prefix)
diff --git a/xds/client/client.go b/xds/client/client.go
index fbf9bfcfd..f1de41027 100644
--- a/xds/client/client.go
+++ b/xds/client/client.go
@@ -36,9 +36,9 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/bootstrap"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpcsync"
 	cache "dubbo.apache.org/dubbo-go/v3/xds/utils/xds_cache"
 )
@@ -75,7 +75,7 @@ type clientImpl struct {
 	// never both.
 	idleAuthorities *cache.TimeoutCache
 
-	logger             *grpclog.PrefixLogger
+	logger             dubboLogger.Logger
 	watchExpiryTimeout time.Duration
 }
 
@@ -96,7 +96,7 @@ func newWithConfig(config *bootstrap.Config, watchExpiryTimeout time.Duration, i
 		}
 	}()
 
-	c.logger = prefixLogger(c)
+	c.logger = dubboLogger.GetLogger()
 	c.logger.Infof("Created ClientConn to xDS management server: %s", config.XDSServer)
 
 	c.logger.Infof("Created")
diff --git a/xds/client/controller.go b/xds/client/controller.go
index 29d2cd726..3af5ae408 100644
--- a/xds/client/controller.go
+++ b/xds/client/controller.go
@@ -28,12 +28,12 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/bootstrap"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/controller"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/load"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/pubsub"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 )
 
 type controllerInterface interface {
@@ -44,6 +44,6 @@ type controllerInterface interface {
 	Close()
 }
 
-var newController = func(config *bootstrap.ServerConfig, pubsub *pubsub.Pubsub, validator resource.UpdateValidatorFunc, logger *grpclog.PrefixLogger) (controllerInterface, error) {
+var newController = func(config *bootstrap.ServerConfig, pubsub *pubsub.Pubsub, validator resource.UpdateValidatorFunc, logger dubboLogger.Logger) (controllerInterface, error) {
 	return controller.New(config, pubsub, validator, logger)
 }
diff --git a/xds/client/controller/controller.go b/xds/client/controller/controller.go
index eb167d7eb..6f45b94a3 100644
--- a/xds/client/controller/controller.go
+++ b/xds/client/controller/controller.go
@@ -47,13 +47,13 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/bootstrap"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/controller/version"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/pubsub"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/backoff"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/buffer"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 )
 
 // Controller manages the connection and stream to the control plane.
@@ -67,7 +67,7 @@ type Controller struct {
 	config          *bootstrap.ServerConfig
 	updateHandler   pubsub.UpdateHandler
 	updateValidator resource.UpdateValidatorFunc
-	logger          *grpclog.PrefixLogger
+	logger          dubboLogger.Logger
 
 	cc               *grpc.ClientConn // Connection to the management server.
 	vClient          version.MetadataWrappedVersionClient
@@ -104,7 +104,7 @@ type Controller struct {
 }
 
 // New creates a new controller.
-func New(config *bootstrap.ServerConfig, updateHandler pubsub.UpdateHandler, validator resource.UpdateValidatorFunc, logger *grpclog.PrefixLogger) (_ *Controller, retErr error) {
+func New(config *bootstrap.ServerConfig, updateHandler pubsub.UpdateHandler, validator resource.UpdateValidatorFunc, logger dubboLogger.Logger) (_ *Controller, retErr error) {
 	switch {
 	case config == nil:
 		return nil, errors.New("xds: no xds_server provided")
@@ -128,13 +128,13 @@ func New(config *bootstrap.ServerConfig, updateHandler pubsub.UpdateHandler, val
 		config:          config,
 		updateValidator: validator,
 		updateHandler:   updateHandler,
-
-		backoff:    backoff.DefaultExponential.Backoff, // TODO: should this be configurable?
-		streamCh:   make(chan grpc.ClientStream, 1),
-		sendCh:     buffer.NewUnbounded(),
-		watchMap:   make(map[resource.ResourceType]map[string]bool),
-		versionMap: make(map[resource.ResourceType]string),
-		nonceMap:   make(map[resource.ResourceType]string),
+		logger:          logger,
+		backoff:         backoff.DefaultExponential.Backoff, // TODO: should this be configurable?
+		streamCh:        make(chan grpc.ClientStream, 1),
+		sendCh:          buffer.NewUnbounded(),
+		watchMap:        make(map[resource.ResourceType]map[string]bool),
+		versionMap:      make(map[resource.ResourceType]string),
+		nonceMap:        make(map[resource.ResourceType]string),
 
 		lrsClients: make(map[string]*lrsClient),
 	}
diff --git a/xds/client/controller/transport.go b/xds/client/controller/transport.go
index 926f0dda9..a1e230d49 100644
--- a/xds/client/controller/transport.go
+++ b/xds/client/controller/transport.go
@@ -93,7 +93,7 @@ func (t *Controller) run(ctx context.Context) {
 		stream, err := t.vClient.NewStream(ctx, t.cc)
 		if err != nil {
 			t.updateHandler.NewConnectionError(err)
-			t.logger.Warningf("xds: ADS stream creation failed: %v", err)
+			t.logger.Warnf("xds: ADS stream creation failed: %v", err)
 			continue
 		}
 		t.logger.Infof("ADS stream created")
@@ -163,7 +163,7 @@ func (t *Controller) send(ctx context.Context) {
 				continue
 			}
 			if err := t.vClient.SendRequest(stream, target, rType, version, nonce, errMsg); err != nil {
-				t.logger.Warningf("ADS request for {target: %q, type: %v, version: %q, nonce: %q} failed: %v", target, rType, version, nonce, err)
+				t.logger.Warnf("ADS request for {target: %q, type: %v, version: %q, nonce: %q} failed: %v", target, rType, version, nonce, err)
 				// send failed, clear the current stream.
 				stream = nil
 			}
@@ -188,7 +188,7 @@ func (t *Controller) sendExisting(stream grpc.ClientStream) bool {
 
 	for rType, s := range t.watchMap {
 		if err := t.vClient.SendRequest(stream, mapToSlice(s), rType, "", "", ""); err != nil {
-			t.logger.Warningf("ADS request failed: %v", err)
+			t.logger.Warnf("ADS request failed: %v", err)
 			return false
 		}
 	}
@@ -204,14 +204,14 @@ func (t *Controller) recv(stream grpc.ClientStream) bool {
 		resp, err := t.vClient.RecvResponse(stream)
 		if err != nil {
 			t.updateHandler.NewConnectionError(err)
-			t.logger.Warningf("ADS stream is closed with error: %v", err)
+			t.logger.Warnf("ADS stream is closed with error: %v", err)
 			return success
 		}
 
 		rType, version, nonce, err := t.handleResponse(resp)
 
 		if e, ok := err.(resourceversion.ErrResourceTypeUnsupported); ok {
-			t.logger.Warningf("%s", e.ErrStr)
+			t.logger.Warnf("%s", e.ErrStr)
 			continue
 		}
 		if err != nil {
@@ -222,7 +222,7 @@ func (t *Controller) recv(stream grpc.ClientStream) bool {
 				errMsg:  err.Error(),
 				stream:  stream,
 			})
-			t.logger.Warningf("Sending NACK for response type: %v, version: %v, nonce: %v, reason: %v", rType, version, nonce, err)
+			t.logger.Warnf("Sending NACK for response type: %v, version: %v, nonce: %v, reason: %v", rType, version, nonce, err)
 			continue
 		}
 		t.sendCh.Put(&ackAction{
@@ -402,19 +402,19 @@ func (t *Controller) reportLoad(ctx context.Context, cc *grpc.ClientConn, opts c
 		retries++
 		stream, err := t.vClient.NewLoadStatsStream(ctx, cc)
 		if err != nil {
-			t.logger.Warningf("lrs: failed to create stream: %v", err)
+			t.logger.Warnf("lrs: failed to create stream: %v", err)
 			continue
 		}
 		t.logger.Infof("lrs: created LRS stream")
 
 		if err = t.vClient.SendFirstLoadStatsRequest(stream); err != nil {
-			t.logger.Warningf("lrs: failed to send first request: %v", err)
+			t.logger.Warnf("lrs: failed to send first request: %v", err)
 			continue
 		}
 
 		clusters, interval, err := t.vClient.HandleLoadStatsResponse(stream)
 		if err != nil {
-			t.logger.Warningf("%v", err)
+			t.logger.Warnf("%v", err)
 			continue
 		}
 
@@ -433,7 +433,7 @@ func (t *Controller) sendLoads(ctx context.Context, stream grpc.ClientStream, st
 			return
 		}
 		if err := t.vClient.SendLoadStatsRequest(stream, store.Stats(clusterNames)); err != nil {
-			t.logger.Warningf("%v", err)
+			t.logger.Warnf("%v", err)
 			return
 		}
 	}
diff --git a/xds/client/controller/version/v2/client.go b/xds/client/controller/version/v2/client.go
index ca44ed2f8..db17af055 100644
--- a/xds/client/controller/version/v2/client.go
+++ b/xds/client/controller/version/v2/client.go
@@ -46,10 +46,10 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	controllerversion "dubbo.apache.org/dubbo-go/v3/xds/client/controller/version"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	resourceversion "dubbo.apache.org/dubbo-go/v3/xds/client/resource/version"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
 
@@ -71,7 +71,7 @@ func newClient(opts controllerversion.BuildOptions) (controllerversion.MetadataW
 	if !ok {
 		return nil, fmt.Errorf("xds: unsupported Node proto type: %T, want %T", opts.NodeProto, (*v2corepb.Node)(nil))
 	}
-	v2c := &client{nodeProto: nodeProto, logger: opts.Logger}
+	v2c := &client{nodeProto: nodeProto, logger: dubboLogger.GetLogger()}
 	return v2c, nil
 }
 
@@ -82,7 +82,7 @@ type adsStream v2adsgrpc.AggregatedDiscoveryService_StreamAggregatedResourcesCli
 // are multiplexed.
 type client struct {
 	nodeProto *v2corepb.Node
-	logger    *grpclog.PrefixLogger
+	logger    dubboLogger.Logger
 }
 
 // SetMetadata update client metadata
diff --git a/xds/client/controller/version/v3/client.go b/xds/client/controller/version/v3/client.go
index 4f3e2f49d..b20a40905 100644
--- a/xds/client/controller/version/v3/client.go
+++ b/xds/client/controller/version/v3/client.go
@@ -46,10 +46,10 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	controllerversion "dubbo.apache.org/dubbo-go/v3/xds/client/controller/version"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	resourceversion "dubbo.apache.org/dubbo-go/v3/xds/client/resource/version"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
 
@@ -72,7 +72,7 @@ func newClient(opts controllerversion.BuildOptions) (controllerversion.MetadataW
 		return nil, fmt.Errorf("xds: unsupported Node proto type: %T, want %T", opts.NodeProto, v3corepb.Node{})
 	}
 	v3c := &client{
-		nodeProto: nodeProto, logger: opts.Logger,
+		nodeProto: nodeProto, logger: dubboLogger.GetLogger(),
 	}
 	return v3c, nil
 }
@@ -84,7 +84,7 @@ type adsStream v3adsgrpc.AggregatedDiscoveryService_StreamAggregatedResourcesCli
 // are multiplexed.
 type client struct {
 	nodeProto *v3corepb.Node
-	logger    *grpclog.PrefixLogger
+	logger    dubboLogger.Logger
 }
 
 func (v3c *client) NewStream(ctx context.Context, cc *grpc.ClientConn) (grpc.ClientStream, error) {
diff --git a/xds/client/controller/version/version.go b/xds/client/controller/version/version.go
index 38a91a9e7..43262668a 100644
--- a/xds/client/controller/version/version.go
+++ b/xds/client/controller/version/version.go
@@ -39,10 +39,10 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/load"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource/version"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 )
 
 var (
@@ -77,7 +77,7 @@ type BuildOptions struct {
 	// // streams.
 	// Backoff func(int) time.Duration
 	// Logger provides enhanced logging capabilities.
-	Logger *grpclog.PrefixLogger
+	Logger dubboLogger.Logger
 }
 
 // LoadReportingOptions contains configuration knobs for reporting load data.
diff --git a/xds/client/logging.go b/xds/client/logging.go
deleted file mode 100644
index 0f94d5582..000000000
--- a/xds/client/logging.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-/*
- *
- * Copyright 2021 gRPC authors.
- *
- */
-
-package client
-
-import (
-	"fmt"
-)
-
-import (
-	"google.golang.org/grpc/grpclog"
-)
-
-import (
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
-)
-
-const prefix = "[xds-client %p] "
-
-var logger = grpclog.Component("xds")
-
-func prefixLogger(p *clientImpl) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(prefix, p))
-}
diff --git a/xds/client/pubsub/pubsub.go b/xds/client/pubsub/pubsub.go
index 7318321bb..70deddc3b 100644
--- a/xds/client/pubsub/pubsub.go
+++ b/xds/client/pubsub/pubsub.go
@@ -34,9 +34,9 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/buffer"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpcsync"
 )
 
@@ -47,7 +47,7 @@ import (
 // any time.
 type Pubsub struct {
 	done               *grpcsync.Event
-	logger             *grpclog.PrefixLogger
+	logger             dubboLogger.Logger
 	watchExpiryTimeout time.Duration
 
 	updateCh *buffer.Unbounded // chan *watcherInfoWithUpdate
@@ -68,7 +68,7 @@ type Pubsub struct {
 }
 
 // New creates a new Pubsub.
-func New(watchExpiryTimeout time.Duration, logger *grpclog.PrefixLogger) *Pubsub {
+func New(watchExpiryTimeout time.Duration, logger dubboLogger.Logger) *Pubsub {
 	pb := &Pubsub{
 		done:               grpcsync.NewEvent(),
 		logger:             logger,
diff --git a/xds/client/resource/filter_chain.go b/xds/client/resource/filter_chain.go
index 6ee865944..afcb7c502 100644
--- a/xds/client/resource/filter_chain.go
+++ b/xds/client/resource/filter_chain.go
@@ -39,10 +39,10 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource/version"
 	"dubbo.apache.org/dubbo-go/v3/xds/httpfilter"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/envconfig"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/resolver"
 )
 
@@ -189,7 +189,7 @@ const (
 // 7. Source IP address.
 // 8. Source port.
 type FilterChainManager struct {
-	logger *grpclog.PrefixLogger
+	logger dubboLogger.Logger
 	// Destination prefix is the first match criteria that we support.
 	// Therefore, this multi-stage map is indexed on destination prefixes
 	// specified in the match criteria.
@@ -260,7 +260,7 @@ type sourcePrefixEntry struct {
 //
 // This function is only exported so that tests outside of this package can
 // create a FilterChainManager.
-func NewFilterChainManager(lis *v3listenerpb.Listener, logger *grpclog.PrefixLogger) (*FilterChainManager, error) {
+func NewFilterChainManager(lis *v3listenerpb.Listener, logger dubboLogger.Logger) (*FilterChainManager, error) {
 	// Parse all the filter chains and build the internal data structures.
 	fci := &FilterChainManager{
 		logger:           logger,
@@ -317,7 +317,7 @@ func (fci *FilterChainManager) addFilterChains(fcs []*v3listenerpb.FilterChain)
 		if fcm.GetDestinationPort().GetValue() != 0 {
 			// Destination port is the first match criteria and we do not
 			// support filter chains which contains this match criteria.
-			fci.logger.Warningf("Dropping filter chain %+v since it contains unsupported destination_port match field", fc)
+			fci.logger.Warnf("Dropping filter chain %+v since it contains unsupported destination_port match field", fc)
 			continue
 		}
 
@@ -366,7 +366,7 @@ func (fci *FilterChainManager) addFilterChainsForServerNames(dstEntry *destPrefi
 	// Filter chains specifying server names in their match criteria always fail
 	// a match at connection time. So, these filter chains can be dropped now.
 	if len(fc.GetFilterChainMatch().GetServerNames()) != 0 {
-		fci.logger.Warningf("Dropping filter chain %+v since it contains unsupported server_names match field", fc)
+		fci.logger.Warnf("Dropping filter chain %+v since it contains unsupported server_names match field", fc)
 		return nil
 	}
 
@@ -379,13 +379,13 @@ func (fci *FilterChainManager) addFilterChainsForTransportProtocols(dstEntry *de
 	case tp != "" && tp != "raw_buffer":
 		// Only allow filter chains with transport protocol set to empty string
 		// or "raw_buffer".
-		fci.logger.Warningf("Dropping filter chain %+v since it contains unsupported value for transport_protocols match field", fc)
+		fci.logger.Warnf("Dropping filter chain %+v since it contains unsupported value for transport_protocols match field", fc)
 		return nil
 	case tp == "" && dstEntry.rawBufferSeen:
 		// If we have already seen filter chains with transport protocol set to
 		// "raw_buffer", we can drop filter chains with transport protocol set
 		// to empty string, since the former takes precedence.
-		fci.logger.Warningf("Dropping filter chain %+v since it contains unsupported value for transport_protocols match field", fc)
+		fci.logger.Warnf("Dropping filter chain %+v since it contains unsupported value for transport_protocols match field", fc)
 		return nil
 	case tp != "" && !dstEntry.rawBufferSeen:
 		// This is the first "raw_buffer" that we are seeing. Set the bit and
@@ -399,7 +399,7 @@ func (fci *FilterChainManager) addFilterChainsForTransportProtocols(dstEntry *de
 
 func (fci *FilterChainManager) addFilterChainsForApplicationProtocols(dstEntry *destPrefixEntry, fc *v3listenerpb.FilterChain) error {
 	if len(fc.GetFilterChainMatch().GetApplicationProtocols()) != 0 {
-		fci.logger.Warningf("Dropping filter chain %+v since it contains unsupported application_protocols match field", fc)
+		fci.logger.Warnf("Dropping filter chain %+v since it contains unsupported application_protocols match field", fc)
 		return nil
 	}
 	return fci.addFilterChainsForSourceType(dstEntry, fc)
diff --git a/xds/client/resource/unmarshal.go b/xds/client/resource/unmarshal.go
index 23a2d50e5..b643651b5 100644
--- a/xds/client/resource/unmarshal.go
+++ b/xds/client/resource/unmarshal.go
@@ -37,7 +37,7 @@ import (
 )
 
 import (
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 )
 
 // UnmarshalOptions wraps the input parameters for `UnmarshalXxx` functions.
@@ -47,7 +47,7 @@ type UnmarshalOptions struct {
 	// Resources are the xDS resources resources in the received response.
 	Resources []*anypb.Any
 	// Logger is the prefix logger to be used during unmarshaling.
-	Logger *grpclog.PrefixLogger
+	Logger dubboLogger.Logger
 	// UpdateValidator is a post unmarshal validation check provided by the
 	// upper layer.
 	UpdateValidator UpdateValidatorFunc
diff --git a/xds/client/resource/unmarshal_cds.go b/xds/client/resource/unmarshal_cds.go
index 2023d3170..aa909d608 100644
--- a/xds/client/resource/unmarshal_cds.go
+++ b/xds/client/resource/unmarshal_cds.go
@@ -42,9 +42,9 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource/version"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/envconfig"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/matcher"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
@@ -62,7 +62,7 @@ func UnmarshalCluster(opts *UnmarshalOptions) (map[string]ClusterUpdateErrTuple,
 	return update, md, err
 }
 
-func unmarshalClusterResource(r *anypb.Any, f UpdateValidatorFunc, logger *grpclog.PrefixLogger) (string, ClusterUpdate, error) {
+func unmarshalClusterResource(r *anypb.Any, f UpdateValidatorFunc, logger dubboLogger.Logger) (string, ClusterUpdate, error) {
 	if !IsClusterResource(r.GetTypeUrl()) {
 		return "", ClusterUpdate{}, fmt.Errorf("unexpected resource type: %q ", r.GetTypeUrl())
 	}
@@ -71,7 +71,7 @@ func unmarshalClusterResource(r *anypb.Any, f UpdateValidatorFunc, logger *grpcl
 	if err := proto.Unmarshal(r.GetValue(), cluster); err != nil {
 		return "", ClusterUpdate{}, fmt.Errorf("failed to unmarshal resource: %v", err)
 	}
-	logger.Infof("Resource with name: %v, type: %T, contains: %v", cluster.GetName(), cluster, pretty.ToJSON(cluster))
+	dubboLogger.Debugf("Resource with name: %v, type: %T, contains: %v", cluster.GetName(), cluster, pretty.ToJSON(cluster))
 	cu, err := validateClusterAndConstructClusterUpdate(cluster)
 	if err != nil {
 		return cluster.GetName(), ClusterUpdate{}, err
diff --git a/xds/client/resource/unmarshal_eds.go b/xds/client/resource/unmarshal_eds.go
index 93068fe04..23132e903 100644
--- a/xds/client/resource/unmarshal_eds.go
+++ b/xds/client/resource/unmarshal_eds.go
@@ -40,7 +40,7 @@ import (
 )
 
 import (
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
 
@@ -53,7 +53,7 @@ func UnmarshalEndpoints(opts *UnmarshalOptions) (map[string]EndpointsUpdateErrTu
 	return update, md, err
 }
 
-func unmarshalEndpointsResource(r *anypb.Any, logger *grpclog.PrefixLogger) (string, EndpointsUpdate, error) {
+func unmarshalEndpointsResource(r *anypb.Any, logger dubboLogger.Logger) (string, EndpointsUpdate, error) {
 	if !IsEndpointsResource(r.GetTypeUrl()) {
 		return "", EndpointsUpdate{}, fmt.Errorf("unexpected resource type: %q ", r.GetTypeUrl())
 	}
@@ -62,7 +62,7 @@ func unmarshalEndpointsResource(r *anypb.Any, logger *grpclog.PrefixLogger) (str
 	if err := proto.Unmarshal(r.GetValue(), cla); err != nil {
 		return "", EndpointsUpdate{}, fmt.Errorf("failed to unmarshal resource: %v", err)
 	}
-	logger.Infof("Resource with name: %v, type: %T, contains: %v", cla.GetClusterName(), cla, pretty.ToJSON(cla))
+	dubboLogger.Debugf("Resource with name: %v, type: %T, contains: %v", cla.GetClusterName(), cla, pretty.ToJSON(cla))
 
 	u, err := parseEDSRespProto(cla)
 	if err != nil {
diff --git a/xds/client/resource/unmarshal_lds.go b/xds/client/resource/unmarshal_lds.go
index 258dc3ac5..011b4593f 100644
--- a/xds/client/resource/unmarshal_lds.go
+++ b/xds/client/resource/unmarshal_lds.go
@@ -45,9 +45,9 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource/version"
 	"dubbo.apache.org/dubbo-go/v3/xds/httpfilter"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
 
@@ -60,7 +60,7 @@ func UnmarshalListener(opts *UnmarshalOptions) (map[string]ListenerUpdateErrTupl
 	return update, md, err
 }
 
-func unmarshalListenerResource(r *anypb.Any, f UpdateValidatorFunc, logger *grpclog.PrefixLogger) (string, ListenerUpdate, error) {
+func unmarshalListenerResource(r *anypb.Any, f UpdateValidatorFunc, logger dubboLogger.Logger) (string, ListenerUpdate, error) {
 	if !IsListenerResource(r.GetTypeUrl()) {
 		return "", ListenerUpdate{}, fmt.Errorf("unexpected resource type: %q ", r.GetTypeUrl())
 	}
@@ -70,7 +70,7 @@ func unmarshalListenerResource(r *anypb.Any, f UpdateValidatorFunc, logger *grpc
 	if err := proto.Unmarshal(r.GetValue(), lis); err != nil {
 		return "", ListenerUpdate{}, fmt.Errorf("failed to unmarshal resource: %v", err)
 	}
-	logger.Infof("Resource with name: %v, type: %T, contains: %v", lis.GetName(), lis, pretty.ToJSON(lis))
+	dubboLogger.Debugf("Resource with name: %v, type: %T, contains: %v", lis.GetName(), lis, pretty.ToJSON(lis))
 
 	lu, err := processListener(lis, logger, v2)
 	if err != nil {
@@ -85,7 +85,7 @@ func unmarshalListenerResource(r *anypb.Any, f UpdateValidatorFunc, logger *grpc
 	return lis.GetName(), *lu, nil
 }
 
-func processListener(lis *v3listenerpb.Listener, logger *grpclog.PrefixLogger, v2 bool) (*ListenerUpdate, error) {
+func processListener(lis *v3listenerpb.Listener, logger dubboLogger.Logger, v2 bool) (*ListenerUpdate, error) {
 	if lis.GetApiListener() != nil {
 		return processClientSideListener(lis, logger, v2)
 	}
@@ -94,7 +94,7 @@ func processListener(lis *v3listenerpb.Listener, logger *grpclog.PrefixLogger, v
 
 // processClientSideListener checks if the provided Listener proto meets
 // the expected criteria. If so, it returns a non-empty routeConfigName.
-func processClientSideListener(lis *v3listenerpb.Listener, logger *grpclog.PrefixLogger, v2 bool) (*ListenerUpdate, error) {
+func processClientSideListener(lis *v3listenerpb.Listener, logger dubboLogger.Logger, v2 bool) (*ListenerUpdate, error) {
 	update := &ListenerUpdate{}
 
 	apiLisAny := lis.GetApiListener().GetApiListener()
@@ -281,7 +281,7 @@ func processHTTPFilters(filters []*v3httppb.HttpFilter, server bool) ([]HTTPFilt
 	return ret, nil
 }
 
-func processServerSideListener(lis *v3listenerpb.Listener, logger *grpclog.PrefixLogger) (*ListenerUpdate, error) {
+func processServerSideListener(lis *v3listenerpb.Listener, logger dubboLogger.Logger) (*ListenerUpdate, error) {
 	if n := len(lis.ListenerFilters); n != 0 {
 		return nil, fmt.Errorf("unsupported field 'listener_filters' contains %d entries", n)
 	}
diff --git a/xds/client/resource/unmarshal_rds.go b/xds/client/resource/unmarshal_rds.go
index 7813cbdc1..3cf346da7 100644
--- a/xds/client/resource/unmarshal_rds.go
+++ b/xds/client/resource/unmarshal_rds.go
@@ -42,10 +42,10 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource/version"
 	"dubbo.apache.org/dubbo-go/v3/xds/clusterspecifier"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/envconfig"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
 
@@ -59,7 +59,7 @@ func UnmarshalRouteConfig(opts *UnmarshalOptions) (map[string]RouteConfigUpdateE
 	return update, md, err
 }
 
-func unmarshalRouteConfigResource(r *anypb.Any, logger *grpclog.PrefixLogger) (string, RouteConfigUpdate, error) {
+func unmarshalRouteConfigResource(r *anypb.Any, logger dubboLogger.Logger) (string, RouteConfigUpdate, error) {
 	if !IsRouteConfigResource(r.GetTypeUrl()) {
 		return "", RouteConfigUpdate{}, fmt.Errorf("unexpected resource type: %q ", r.GetTypeUrl())
 	}
@@ -67,7 +67,7 @@ func unmarshalRouteConfigResource(r *anypb.Any, logger *grpclog.PrefixLogger) (s
 	if err := proto.Unmarshal(r.GetValue(), rc); err != nil {
 		return "", RouteConfigUpdate{}, fmt.Errorf("failed to unmarshal resource: %v", err)
 	}
-	logger.Infof("Resource with name: %v, type: %T, contains: %v.", rc.GetName(), rc, pretty.ToJSON(rc))
+	dubboLogger.Debugf("Resource with name: %v, type: %T, contains: %v.", rc.GetName(), rc, pretty.ToJSON(rc))
 
 	// TODO: Pass version.TransportAPI instead of relying upon the type URL
 	v2 := r.GetTypeUrl() == version.V2RouteConfigURL
@@ -95,7 +95,7 @@ func unmarshalRouteConfigResource(r *anypb.Any, logger *grpclog.PrefixLogger) (s
 // field must be empty and whose route field must be set.  Inside that route
 // message, the cluster field will contain the clusterName or weighted clusters
 // we are looking for.
-func generateRDSUpdateFromRouteConfiguration(rc *v3routepb.RouteConfiguration, logger *grpclog.PrefixLogger, v2 bool) (RouteConfigUpdate, error) {
+func generateRDSUpdateFromRouteConfiguration(rc *v3routepb.RouteConfiguration, logger dubboLogger.Logger, v2 bool) (RouteConfigUpdate, error) {
 	vhs := make([]*VirtualHost, 0, len(rc.GetVirtualHosts()))
 	csps := make(map[string]clusterspecifier.BalancerConfig)
 	if envconfig.XDSRLS {
@@ -230,7 +230,7 @@ func generateRetryConfig(rp *v3routepb.RetryPolicy) (*RetryConfig, error) {
 	return cfg, nil
 }
 
-func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecifier.BalancerConfig, logger *grpclog.PrefixLogger, v2 bool) ([]*Route, map[string]bool, error) {
+func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecifier.BalancerConfig, logger dubboLogger.Logger, v2 bool) ([]*Route, map[string]bool, error) {
 	var routesRet []*Route
 	var cspNames = make(map[string]bool)
 	for _, r := range routes {
@@ -241,7 +241,7 @@ func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecif
 
 		if len(match.GetQueryParameters()) != 0 {
 			// Ignore route with query parameters.
-			logger.Warningf("route %+v has query parameter matchers, the route will be ignored", r)
+			logger.Warnf("route %+v has query parameter matchers, the route will be ignored", r)
 			continue
 		}
 
@@ -421,7 +421,7 @@ func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecif
 	return routesRet, cspNames, nil
 }
 
-func hashPoliciesProtoToSlice(policies []*v3routepb.RouteAction_HashPolicy, logger *grpclog.PrefixLogger) ([]*HashPolicy, error) {
+func hashPoliciesProtoToSlice(policies []*v3routepb.RouteAction_HashPolicy, logger dubboLogger.Logger) ([]*HashPolicy, error) {
 	var hashPoliciesRet []*HashPolicy
 	for _, p := range policies {
 		policy := HashPolicy{Terminal: p.Terminal}
diff --git a/xds/csds/csds.go b/xds/csds/csds.go
index 8d5fce22e..f5172a397 100644
--- a/xds/csds/csds.go
+++ b/xds/csds/csds.go
@@ -44,14 +44,13 @@ import (
 
 	"google.golang.org/grpc/codes"
 
-	"google.golang.org/grpc/grpclog"
-
 	"google.golang.org/grpc/status"
 
 	"google.golang.org/protobuf/types/known/timestamppb"
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client"
 	_ "dubbo.apache.org/dubbo-go/v3/xds/client/controller/version/v2" // Register v2 xds_client.
 	_ "dubbo.apache.org/dubbo-go/v3/xds/client/controller/version/v3" // Register v3 xds_client.
@@ -59,11 +58,10 @@ import (
 )
 
 var (
-	logger       = grpclog.Component("xds")
 	newXDSClient = func() client.XDSClient {
 		c, err := client.New()
 		if err != nil {
-			logger.Warningf("failed to create xds client: %v", err)
+			logger.Warnf("failed to create xds client: %v", err)
 			return nil
 		}
 		return c
@@ -175,15 +173,15 @@ func nodeProtoToV3(n proto.Message) *v3corepb.Node {
 	case *v2corepb.Node:
 		v2, err := proto.Marshal(nn)
 		if err != nil {
-			logger.Warningf("Failed to marshal node (%v): %v", n, err)
+			logger.Warnf("Failed to marshal node (%v): %v", n, err)
 			break
 		}
 		node = new(v3corepb.Node)
 		if err := proto.Unmarshal(v2, node); err != nil {
-			logger.Warningf("Failed to unmarshal node (%v): %v", v2, err)
+			logger.Warnf("Failed to unmarshal node (%v): %v", v2, err)
 		}
 	default:
-		logger.Warningf("node from bootstrap is %#v, only v2.Node and v3.Node are supported", nn)
+		logger.Warnf("node from bootstrap is %#v, only v2.Node and v3.Node are supported", nn)
 	}
 	return node
 }
diff --git a/xds/resolver/logging.go b/xds/resolver/logging.go
deleted file mode 100644
index 35006edb4..000000000
--- a/xds/resolver/logging.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-/*
- *
- * Copyright 2020 gRPC authors.
- *
- */
-
-package resolver
-
-import (
-	"fmt"
-)
-
-import (
-	"google.golang.org/grpc/grpclog"
-)
-
-import (
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
-)
-
-const prefix = "[xds-resolver %p] "
-
-var logger = grpclog.Component("xds")
-
-func prefixLogger(p *xdsResolver) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(prefix, p))
-}
diff --git a/xds/resolver/watch_service.go b/xds/resolver/watch_service.go
index 3ef4f844b..7b275f4c2 100644
--- a/xds/resolver/watch_service.go
+++ b/xds/resolver/watch_service.go
@@ -30,10 +30,10 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	"dubbo.apache.org/dubbo-go/v3/xds/clusterspecifier"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 )
 
@@ -65,7 +65,7 @@ type ldsConfig struct {
 // Note that during race (e.g. an xDS response is received while the user is
 // calling cancel()), there's a small window where the callback can be called
 // after the watcher is canceled. The caller needs to handle this case.
-func watchService(c client.XDSClient, serviceName string, cb func(serviceUpdate, error), logger *grpclog.PrefixLogger) (cancel func()) {
+func watchService(c client.XDSClient, serviceName string, cb func(serviceUpdate, error), logger dubboLogger.Logger) (cancel func()) {
 	w := &serviceUpdateWatcher{
 		logger:      logger,
 		c:           c,
@@ -80,7 +80,7 @@ func watchService(c client.XDSClient, serviceName string, cb func(serviceUpdate,
 // serviceUpdateWatcher handles LDS and RDS response, and calls the service
 // callback at the right time.
 type serviceUpdateWatcher struct {
-	logger      *grpclog.PrefixLogger
+	logger      dubboLogger.Logger
 	c           client.XDSClient
 	serviceName string
 	ldsCancel   func()
diff --git a/xds/resolver/xds_resolver.go b/xds/resolver/xds_resolver.go
index 2d597d1d4..9457c6212 100644
--- a/xds/resolver/xds_resolver.go
+++ b/xds/resolver/xds_resolver.go
@@ -38,10 +38,10 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/bootstrap"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpcsync"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/pretty"
 	iresolver "dubbo.apache.org/dubbo-go/v3/xds/utils/resolver"
@@ -88,7 +88,7 @@ func (b *xdsResolverBuilder) Build(t resolver.Target, cc resolver.ClientConn, op
 			r.Close()
 		}
 	}()
-	r.logger = prefixLogger(r)
+	r.logger = dubboLogger.GetLogger()
 	r.logger.Infof("Creating resolver for target: %+v", t)
 
 	newXDSClient := newXDSClient
@@ -181,7 +181,7 @@ type xdsResolver struct {
 	cc     resolver.ClientConn
 	closed *grpcsync.Event
 
-	logger *grpclog.PrefixLogger
+	logger dubboLogger.Logger
 
 	// The underlying xdsClient which performs all xDS requests and responses.
 	client client.XDSClient
@@ -243,7 +243,7 @@ func (r *xdsResolver) run() {
 			return
 		case update := <-r.updateCh:
 			if update.err != nil {
-				r.logger.Warningf("Watch error on resource %v from xds-client %p, %v", r.target.Endpoint, r.client, update.err)
+				r.logger.Warnf("Watch error on resource %v from xds-client %p, %v", r.target.Endpoint, r.client, update.err)
 				if resource.ErrType(update.err) == resource.ErrorTypeResourceNotFound {
 					// If error is resource-not-found, it means the LDS
 					// resource was removed. Ultimately send an empty service
@@ -271,7 +271,7 @@ func (r *xdsResolver) run() {
 			// Create the config selector for this update.
 			cs, err := r.newConfigSelector(update.su)
 			if err != nil {
-				r.logger.Warningf("Error parsing update on resource %v from xds-client %p: %v", r.target.Endpoint, r.client, err)
+				r.logger.Warnf("Error parsing update on resource %v from xds-client %p: %v", r.target.Endpoint, r.client, err)
 				r.cc.ReportError(err)
 				continue
 			}
diff --git a/xds/server/listener_wrapper.go b/xds/server/listener_wrapper.go
index 27ffc64bc..cf3d12f92 100644
--- a/xds/server/listener_wrapper.go
+++ b/xds/server/listener_wrapper.go
@@ -44,11 +44,11 @@ import (
 )
 
 import (
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/bootstrap"
 	"dubbo.apache.org/dubbo-go/v3/xds/client/resource"
 	internalbackoff "dubbo.apache.org/dubbo-go/v3/xds/utils/backoff"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/envconfig"
-	internalgrpclog "dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
 	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpcsync"
 )
 
@@ -78,10 +78,6 @@ type ServingModeCallback func(addr net.Addr, mode connectivity.ServingMode, err
 // connections.
 type DrainCallback func(addr net.Addr)
 
-func prefixLogger(p *listenerWrapper) *internalgrpclog.PrefixLogger {
-	return internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[xds-server-listener %p] ", p))
-}
-
 // XDSClient wraps the methods on the XDSClient which are required by
 // the listenerWrapper.
 type XDSClient interface {
@@ -128,7 +124,7 @@ func NewListenerWrapper(params ListenerWrapperParams) (net.Listener, <-chan stru
 		ldsUpdateCh: make(chan ldsUpdateWithError, 1),
 		rdsUpdateCh: make(chan rdsHandlerUpdate, 1),
 	}
-	lw.logger = prefixLogger(lw)
+	lw.logger = dubboLogger.GetLogger()
 
 	// Serve() verifies that Addr() returns a valid TCPAddr. So, it is safe to
 	// ignore the error from SplitHostPort().
@@ -157,7 +153,7 @@ type ldsUpdateWithError struct {
 // particular invocation of Serve().
 type listenerWrapper struct {
 	net.Listener
-	logger *internalgrpclog.PrefixLogger
+	logger dubboLogger.Logger
 
 	name          string
 	xdsCredsInUse bool
@@ -281,7 +277,7 @@ func (l *listenerWrapper) Accept() (net.Conn, error) {
 			// error, `grpc.Serve()` method sleeps for a small duration and
 			// therefore ends up blocking all connection attempts during that
 			// time frame, which is also not ideal for an error like this.
-			l.logger.Warningf("connection from %s to %s failed to find any matching filter chain", conn.RemoteAddr().String(), conn.LocalAddr().String())
+			l.logger.Warnf("connection from %s to %s failed to find any matching filter chain", conn.RemoteAddr().String(), conn.LocalAddr().String())
 			conn.Close()
 			continue
 		}
@@ -313,7 +309,7 @@ func (l *listenerWrapper) Accept() (net.Conn, error) {
 		// tradeoff for simplicity.
 		vhswi, err := fc.ConstructUsableRouteConfiguration(rc)
 		if err != nil {
-			l.logger.Warningf("route configuration construction: %v", err)
+			l.logger.Warnf("route configuration construction: %v", err)
 			conn.Close()
 			continue
 		}
@@ -354,7 +350,7 @@ func (l *listenerWrapper) run() {
 // goroutine.
 func (l *listenerWrapper) handleListenerUpdate(update resource.ListenerUpdate, err error) {
 	if l.closed.HasFired() {
-		l.logger.Warningf("Resource %q received update: %v with error: %v, after listener was closed", l.name, update, err)
+		l.logger.Warnf("Resource %q received update: %v with error: %v, after listener was closed", l.name, update, err)
 		return
 	}
 	// Remove any existing entry in ldsUpdateCh and replace with the new one, as the only update
@@ -371,11 +367,11 @@ func (l *listenerWrapper) handleListenerUpdate(update resource.ListenerUpdate, e
 // configuration (both LDS and RDS) has been received.
 func (l *listenerWrapper) handleRDSUpdate(update rdsHandlerUpdate) {
 	if l.closed.HasFired() {
-		l.logger.Warningf("RDS received update: %v with error: %v, after listener was closed", update.updates, update.err)
+		l.logger.Warnf("RDS received update: %v with error: %v, after listener was closed", update.updates, update.err)
 		return
 	}
 	if update.err != nil {
-		l.logger.Warningf("Received error for rds names specified in resource %q: %+v", l.name, update.err)
+		l.logger.Warnf("Received error for rds names specified in resource %q: %+v", l.name, update.err)
 		if resource.ErrType(update.err) == resource.ErrorTypeResourceNotFound {
 			l.switchMode(nil, connectivity.ServingModeNotServing, update.err)
 		}
@@ -391,7 +387,7 @@ func (l *listenerWrapper) handleRDSUpdate(update rdsHandlerUpdate) {
 
 func (l *listenerWrapper) handleLDSUpdate(update ldsUpdateWithError) {
 	if update.err != nil {
-		l.logger.Warningf("Received error for resource %q: %+v", l.name, update.err)
+		l.logger.Warnf("Received error for resource %q: %+v", l.name, update.err)
 		if resource.ErrType(update.err) == resource.ErrorTypeResourceNotFound {
 			l.switchMode(nil, connectivity.ServingModeNotServing, update.err)
 		}
@@ -450,5 +446,5 @@ func (l *listenerWrapper) switchMode(fcs *resource.FilterChainManager, newMode c
 	if l.modeCallback != nil {
 		l.modeCallback(l.Listener.Addr(), newMode, err)
 	}
-	l.logger.Warningf("Listener %q entering mode: %q due to error: %v", l.Addr(), newMode, err)
+	l.logger.Warnf("Listener %q entering mode: %q due to error: %v", l.Addr(), newMode, err)
 }
diff --git a/xds/utils/balancergroup/balancergroup.go b/xds/utils/balancergroup/balancergroup.go
index 2e0dc8660..3f11e9b4f 100644
--- a/xds/utils/balancergroup/balancergroup.go
+++ b/xds/utils/balancergroup/balancergroup.go
@@ -40,7 +40,7 @@ import (
 )
 
 import (
-	"dubbo.apache.org/dubbo-go/v3/xds/utils/grpclog"
+	dubboLogger "dubbo.apache.org/dubbo-go/v3/common/logger"
 	cache "dubbo.apache.org/dubbo-go/v3/xds/utils/xds_cache"
 )
 
@@ -206,7 +206,7 @@ func (sbc *subBalancerWrapper) stopBalancer() {
 type BalancerGroup struct {
 	cc        balancer.ClientConn
 	buildOpts balancer.BuildOptions
-	logger    *grpclog.PrefixLogger
+	logger    dubboLogger.Logger
 
 	// stateAggregator is where the state/picker updates will be sent to. It's
 	// provided by the parent balancer, to build a picker with all the
@@ -261,7 +261,7 @@ var DefaultSubBalancerCloseTimeout = 15 * time.Minute
 
 // New creates a new BalancerGroup. Note that the BalancerGroup
 // needs to be started to work.
-func New(cc balancer.ClientConn, bOpts balancer.BuildOptions, stateAggregator BalancerStateAggregator, logger *grpclog.PrefixLogger) *BalancerGroup {
+func New(cc balancer.ClientConn, bOpts balancer.BuildOptions, stateAggregator BalancerStateAggregator, logger dubboLogger.Logger) *BalancerGroup {
 	return &BalancerGroup{
 		cc:              cc,
 		buildOpts:       bOpts,
diff --git a/xds/utils/grpclog/grpclog.go b/xds/utils/grpclog/grpclog.go
index b585fbff1..aa7a2d37f 100644
--- a/xds/utils/grpclog/grpclog.go
+++ b/xds/utils/grpclog/grpclog.go
@@ -94,8 +94,8 @@ type LoggerV2 interface {
 	Warning(args ...interface{})
 	// Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println.
 	Warningln(args ...interface{})
-	// Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf.
-	Warningf(format string, args ...interface{})
+	// Warnf logs to WARNING log. Arguments are handled in the manner of fmt.Printf.
+	Warnf(format string, args ...interface{})
 	// Error logs to ERROR log. Arguments are handled in the manner of fmt.Print.
 	Error(args ...interface{})
 	// Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println.
diff --git a/xds/utils/grpclog/prefixLogger.go b/xds/utils/grpclog/prefixLogger.go
index 46abf112f..6d9c6a0ed 100644
--- a/xds/utils/grpclog/prefixLogger.go
+++ b/xds/utils/grpclog/prefixLogger.go
@@ -46,8 +46,8 @@ func (pl *PrefixLogger) Infof(format string, args ...interface{}) {
 	InfoDepth(1, fmt.Sprintf(format, args...))
 }
 
-// Warningf does warning logging.
-func (pl *PrefixLogger) Warningf(format string, args ...interface{}) {
+// Warnf does warning logging.
+func (pl *PrefixLogger) Warnf(format string, args ...interface{}) {
 	if pl != nil {
 		format = pl.prefix + format
 		pl.logger.WarningDepth(1, fmt.Sprintf(format, args...))
@@ -66,17 +66,6 @@ func (pl *PrefixLogger) Errorf(format string, args ...interface{}) {
 	ErrorDepth(1, fmt.Sprintf(format, args...))
 }
 
-// Debugf does info logging at verbose level 2.
-func (pl *PrefixLogger) Debugf(format string, args ...interface{}) {
-	if pl != nil {
-		// Handle nil, so the tests can pass in a nil logger.
-		format = pl.prefix + format
-		pl.logger.InfoDepth(1, fmt.Sprintf(format, args...))
-		return
-	}
-	InfoDepth(1, fmt.Sprintf(format, args...))
-}
-
 // NewPrefixLogger creates a prefix logger with the given prefix.
 func NewPrefixLogger(logger DepthLoggerV2, prefix string) *PrefixLogger {
 	return &PrefixLogger{logger: logger, prefix: prefix}
diff --git a/xds/utils/serviceconfig/serviceconfig.go b/xds/utils/serviceconfig/serviceconfig.go
index 79f5f0e53..a9115f571 100644
--- a/xds/utils/serviceconfig/serviceconfig.go
+++ b/xds/utils/serviceconfig/serviceconfig.go
@@ -35,12 +35,12 @@ import (
 
 	"google.golang.org/grpc/codes"
 
-	"google.golang.org/grpc/grpclog"
-
 	externalserviceconfig "google.golang.org/grpc/serviceconfig"
 )
 
-var logger = grpclog.Component("core")
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+)
 
 // BalancerConfig wraps the name and config associated with one load balancing
 // policy. It corresponds to a single entry of the loadBalancingConfig field
@@ -115,7 +115,7 @@ func (bc *BalancerConfig) UnmarshalJSON(b []byte) error {
 		parser, ok := builder.(balancer.ConfigParser)
 		if !ok {
 			if string(jsonCfg) != "{}" {
-				logger.Warningf("non-empty balancer configuration %q, but balancer does not implement ParseConfig", string(jsonCfg))
+				logger.Warnf("non-empty balancer configuration %q, but balancer does not implement ParseConfig", string(jsonCfg))
 			}
 			// Stop at this, though the builder doesn't support parsing config.
 			return nil