chore: unify the logging component (#2584)

diff --git a/cmd/root/root.go b/cmd/root/root.go
index f9cc71f..577b056 100644
--- a/cmd/root/root.go
+++ b/cmd/root/root.go
@@ -38,7 +38,6 @@
 	"github.com/apache/apisix-ingress-controller/internal/controller/config"
 	"github.com/apache/apisix-ingress-controller/internal/manager"
 	"github.com/apache/apisix-ingress-controller/internal/version"
-	"github.com/api7/gopkg/pkg/log"
 )
 
 type GatewayConfigsFlag struct {
@@ -115,16 +114,6 @@
 				return err
 			}
 
-			l, err := log.NewLogger(
-				log.WithOutputFile("stderr"),
-				log.WithLogLevel(cfg.LogLevel),
-				log.WithSkipFrames(3),
-			)
-			if err != nil {
-				return err
-			}
-			log.DefaultLogger = l
-
 			// controllers log
 			core := zapcore.NewCore(
 				zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig()),
diff --git a/internal/adc/cache/store.go b/internal/adc/cache/store.go
index 7015226..6c5a1f2 100644
--- a/internal/adc/cache/store.go
+++ b/internal/adc/cache/store.go
@@ -21,9 +21,8 @@
 	"fmt"
 	"sync"
 
-	"github.com/api7/gopkg/pkg/log"
+	"github.com/go-logr/logr"
 	"github.com/google/uuid"
-	"go.uber.org/zap"
 
 	adctypes "github.com/apache/apisix-ingress-controller/api/adc"
 	"github.com/apache/apisix-ingress-controller/internal/controller/label"
@@ -34,12 +33,14 @@
 	pluginMetadataMap map[string]adctypes.PluginMetadata
 
 	sync.Mutex
+	log logr.Logger
 }
 
-func NewStore() *Store {
+func NewStore(log logr.Logger) *Store {
 	return &Store{
 		cacheMap:          make(map[string]Cache),
 		pluginMetadataMap: make(map[string]adctypes.PluginMetadata),
+		log:               log,
 	}
 }
 
@@ -55,7 +56,7 @@
 		s.cacheMap[name] = db
 		targetCache = s.cacheMap[name]
 	}
-	log.Debugw("Inserting resources into cache for", zap.String("name", name))
+	s.log.V(1).Info("Inserting resources into cache", "name", name, "resourceTypes", resourceTypes, "Labels", Labels)
 	selector := &KindLabelSelector{
 		Kind:      Labels[label.LabelKind],
 		Name:      Labels[label.LabelName],
@@ -162,41 +163,41 @@
 		case adctypes.TypeService:
 			services, err := targetCache.ListServices(selector)
 			if err != nil {
-				log.Errorw("failed to list services", zap.Error(err))
+				s.log.Error(err, "failed to list services")
 			}
 			for _, service := range services {
 				if err := targetCache.DeleteService(service); err != nil {
-					log.Errorw("failed to delete service", zap.Error(err), zap.String("service", service.ID))
+					s.log.Error(err, "failed to delete service", "service", service.ID)
 				}
 			}
 		case adctypes.TypeSSL:
 			ssls, err := targetCache.ListSSL(selector)
 			if err != nil {
-				log.Errorw("failed to list ssl", zap.Error(err))
+				s.log.Error(err, "failed to list ssl")
 			}
 			for _, ssl := range ssls {
 				if err := targetCache.DeleteSSL(ssl); err != nil {
-					log.Errorw("failed to delete ssl", zap.Error(err), zap.String("ssl", ssl.ID))
+					s.log.Error(err, "failed to delete ssl", "ssl", ssl.ID)
 				}
 			}
 		case adctypes.TypeConsumer:
 			consumers, err := targetCache.ListConsumers(selector)
 			if err != nil {
-				log.Errorw("failed to list consumers", zap.Error(err))
+				s.log.Error(err, "failed to list consumers")
 			}
 			for _, consumer := range consumers {
 				if err := targetCache.DeleteConsumer(consumer); err != nil {
-					log.Errorw("failed to delete consumer", zap.Error(err), zap.String("consumer", consumer.Username))
+					s.log.Error(err, "failed to delete consumer", "consumer", consumer.Username)
 				}
 			}
 		case adctypes.TypeGlobalRule:
 			globalRules, err := targetCache.ListGlobalRules(selector)
 			if err != nil {
-				log.Errorw("failed to list global rules", zap.Error(err))
+				s.log.Error(err, "failed to list global rules")
 			}
 			for _, globalRule := range globalRules {
 				if err := targetCache.DeleteGlobalRule(globalRule); err != nil {
-					log.Errorw("failed to delete global rule", zap.Error(err), zap.String("global rule", globalRule.ID))
+					s.log.Error(err, "failed to delete global rule", "global rule", globalRule.ID)
 				}
 			}
 		case adctypes.TypePluginMetadata:
@@ -229,7 +230,7 @@
 		}
 		globalrule = adctypes.GlobalRule(merged)
 	}
-	log.Debugw("get resources global rule items", zap.Any("globalRuleItems", globalRuleItems))
+	s.log.V(1).Info("GetResources fetched global rule items", "items", globalRuleItems, "gobalrule", globalrule)
 	if meta, ok := s.pluginMetadataMap[name]; ok {
 		metadata = meta.DeepCopy()
 	}
diff --git a/internal/adc/client/client.go b/internal/adc/client/client.go
index 3474636..b395199 100644
--- a/internal/adc/client/client.go
+++ b/internal/adc/client/client.go
@@ -26,9 +26,8 @@
 	"sync"
 	"time"
 
-	"github.com/api7/gopkg/pkg/log"
+	"github.com/go-logr/logr"
 	"github.com/pkg/errors"
-	"go.uber.org/zap"
 
 	adctypes "github.com/apache/apisix-ingress-controller/api/adc"
 	"github.com/apache/apisix-ingress-controller/internal/adc/cache"
@@ -47,22 +46,28 @@
 
 	ConfigManager    *common.ConfigManager[types.NamespacedNameKind, adctypes.Config]
 	ADCDebugProvider *common.ADCDebugProvider
+
+	log logr.Logger
 }
 
-func New(mode string, timeout time.Duration) (*Client, error) {
+func New(log logr.Logger, mode string, timeout time.Duration) (*Client, error) {
 	serverURL := os.Getenv("ADC_SERVER_URL")
 	if serverURL == "" {
 		serverURL = defaultHTTPADCExecutorAddr
 	}
-	store := cache.NewStore()
+	store := cache.NewStore(log)
 	configManager := common.NewConfigManager[types.NamespacedNameKind, adctypes.Config]()
-	log.Infow("using HTTP ADC Executor", zap.String("server_url", serverURL))
+
+	logger := log.WithName("client")
+	logger.Info("ADC client initialized", "mode", mode)
+
 	return &Client{
 		Store:            store,
-		executor:         NewHTTPADCExecutor(serverURL, timeout),
+		executor:         NewHTTPADCExecutor(log, serverURL, timeout),
 		BackendMode:      mode,
 		ConfigManager:    configManager,
 		ADCDebugProvider: common.NewADCDebugProvider(store, configManager),
+		log:              logger,
 	}, nil
 }
 
@@ -80,31 +85,31 @@
 	Applied map[types.NamespacedNameKind]adctypes.Config
 }
 
-func (d *Client) applyStoreChanges(args Task, isDelete bool) (StoreDelta, error) {
-	d.mu.Lock()
-	defer d.mu.Unlock()
+func (c *Client) applyStoreChanges(args Task, isDelete bool) (StoreDelta, error) {
+	c.mu.Lock()
+	defer c.mu.Unlock()
 
 	var delta StoreDelta
 
 	if isDelete {
-		delta.Deleted = d.ConfigManager.Get(args.Key)
-		d.ConfigManager.Delete(args.Key)
+		delta.Deleted = c.ConfigManager.Get(args.Key)
+		c.ConfigManager.Delete(args.Key)
 	} else {
-		deleted := d.ConfigManager.Update(args.Key, args.Configs)
+		deleted := c.ConfigManager.Update(args.Key, args.Configs)
 		delta.Deleted = deleted
 		delta.Applied = args.Configs
 	}
 
 	for _, cfg := range delta.Deleted {
-		if err := d.Store.Delete(cfg.Name, args.ResourceTypes, args.Labels); err != nil {
-			log.Errorw("store delete failed", zap.Error(err), zap.Any("cfg", cfg), zap.Any("args", args))
+		if err := c.Store.Delete(cfg.Name, args.ResourceTypes, args.Labels); err != nil {
+			c.log.Error(err, "store delete failed", "cfg", cfg, "args", args)
 			return StoreDelta{}, errors.Wrap(err, fmt.Sprintf("store delete failed for config %s", cfg.Name))
 		}
 	}
 
 	for _, cfg := range delta.Applied {
-		if err := d.Insert(cfg.Name, args.ResourceTypes, args.Resources, args.Labels); err != nil {
-			log.Errorw("store insert failed", zap.Error(err), zap.Any("cfg", cfg), zap.Any("args", args))
+		if err := c.Insert(cfg.Name, args.ResourceTypes, args.Resources, args.Labels); err != nil {
+			c.log.Error(err, "store insert failed", "cfg", cfg, "args", args)
 			return StoreDelta{}, errors.Wrap(err, fmt.Sprintf("store insert failed for config %s", cfg.Name))
 		}
 	}
@@ -112,23 +117,23 @@
 	return delta, nil
 }
 
-func (d *Client) applySync(ctx context.Context, args Task, delta StoreDelta) error {
-	d.syncMu.RLock()
-	defer d.syncMu.RUnlock()
+func (c *Client) applySync(ctx context.Context, args Task, delta StoreDelta) error {
+	c.syncMu.RLock()
+	defer c.syncMu.RUnlock()
 
 	if len(delta.Deleted) > 0 {
-		if err := d.sync(ctx, Task{
+		if err := c.sync(ctx, Task{
 			Name:          args.Name,
 			Labels:        args.Labels,
 			ResourceTypes: args.ResourceTypes,
 			Configs:       delta.Deleted,
 		}); err != nil {
-			log.Warnw("failed to sync deleted configs", zap.Error(err))
+			c.log.Error(err, "failed to sync deleted configs", "args", args, "delta", delta)
 		}
 	}
 
 	if len(delta.Applied) > 0 {
-		return d.sync(ctx, Task{
+		return c.sync(ctx, Task{
 			Name:          args.Name,
 			Labels:        args.Labels,
 			ResourceTypes: args.ResourceTypes,
@@ -139,45 +144,45 @@
 	return nil
 }
 
-func (d *Client) Update(ctx context.Context, args Task) error {
-	delta, err := d.applyStoreChanges(args, false)
+func (c *Client) Update(ctx context.Context, args Task) error {
+	delta, err := c.applyStoreChanges(args, false)
 	if err != nil {
 		return err
 	}
-	return d.applySync(ctx, args, delta)
+	return c.applySync(ctx, args, delta)
 }
 
-func (d *Client) UpdateConfig(ctx context.Context, args Task) error {
-	_, err := d.applyStoreChanges(args, false)
+func (c *Client) UpdateConfig(ctx context.Context, args Task) error {
+	_, err := c.applyStoreChanges(args, false)
 	return err
 }
 
-func (d *Client) Delete(ctx context.Context, args Task) error {
-	delta, err := d.applyStoreChanges(args, true)
+func (c *Client) Delete(ctx context.Context, args Task) error {
+	delta, err := c.applyStoreChanges(args, true)
 	if err != nil {
 		return err
 	}
-	return d.applySync(ctx, args, delta)
+	return c.applySync(ctx, args, delta)
 }
 
-func (d *Client) DeleteConfig(ctx context.Context, args Task) error {
-	_, err := d.applyStoreChanges(args, true)
+func (c *Client) DeleteConfig(ctx context.Context, args Task) error {
+	_, err := c.applyStoreChanges(args, true)
 	return err
 }
 
 func (c *Client) Sync(ctx context.Context) (map[string]types.ADCExecutionErrors, error) {
 	c.syncMu.Lock()
 	defer c.syncMu.Unlock()
-	log.Debug("syncing all resources")
+	c.log.Info("syncing all resources")
 
 	configs := c.ConfigManager.List()
 
 	if len(configs) == 0 {
-		log.Warn("no GatewayProxy configs provided")
+		c.log.Info("no GatewayProxy configs provided")
 		return nil, nil
 	}
 
-	log.Debugw("syncing resources with multiple configs", zap.Any("configs", configs))
+	c.log.V(1).Info("syncing resources with multiple configs", "configs", configs)
 
 	failedMap := map[string]types.ADCExecutionErrors{}
 	var failedConfigs []string
@@ -185,7 +190,7 @@
 		name := config.Name
 		resources, err := c.GetResources(name)
 		if err != nil {
-			log.Errorw("failed to get resources from store", zap.String("name", name), zap.Error(err))
+			c.log.Error(err, "failed to get resources from store", "name", name)
 			failedConfigs = append(failedConfigs, name)
 			continue
 		}
@@ -200,7 +205,7 @@
 			},
 			Resources: resources,
 		}); err != nil {
-			log.Errorw("failed to sync resources", zap.String("name", name), zap.Error(err))
+			c.log.Error(err, "failed to sync resources", "name", name)
 			failedConfigs = append(failedConfigs, name)
 			var execErrs types.ADCExecutionErrors
 			if errors.As(err, &execErrs) {
@@ -219,10 +224,10 @@
 }
 
 func (c *Client) sync(ctx context.Context, task Task) error {
-	log.Debugw("syncing resources", zap.Any("task", task))
+	c.log.V(1).Info("syncing resources", "task", task)
 
 	if len(task.Configs) == 0 {
-		log.Warnw("no adc configs provided", zap.Any("task", task))
+		c.log.Info("no adc configs provided")
 		return nil
 	}
 
@@ -238,6 +243,7 @@
 	}
 	pkgmetrics.RecordFileIODuration("prepare_sync_file", adctypes.StatusSuccess, time.Since(fileIOStart).Seconds())
 	defer cleanup()
+	c.log.V(1).Info("prepared sync file", "path", syncFilePath)
 
 	args := BuildADCExecuteArgs(syncFilePath, task.Labels, task.ResourceTypes)
 
@@ -255,7 +261,7 @@
 		status := adctypes.StatusSuccess
 		if err != nil {
 			status = "failure"
-			log.Errorw("failed to execute adc command", zap.Error(err), zap.Any("config", config))
+			c.log.Error(err, "failed to execute adc command", "config", config)
 
 			var execErr types.ADCExecutionError
 			if errors.As(err, &execErr) {
@@ -295,7 +301,5 @@
 		return "", nil, err
 	}
 
-	log.Debugw("generated adc file", zap.String("filename", tmpFile.Name()), zap.String("json", string(data)))
-
 	return tmpFile.Name(), cleanup, nil
 }
diff --git a/internal/adc/client/executor.go b/internal/adc/client/executor.go
index bda6c7d..5d997ef 100644
--- a/internal/adc/client/executor.go
+++ b/internal/adc/client/executor.go
@@ -32,8 +32,7 @@
 	"sync"
 	"time"
 
-	"github.com/api7/gopkg/pkg/log"
-	"go.uber.org/zap"
+	"github.com/go-logr/logr"
 	"k8s.io/utils/ptr"
 
 	adctypes "github.com/apache/apisix-ingress-controller/api/adc"
@@ -50,6 +49,7 @@
 
 type DefaultADCExecutor struct {
 	sync.Mutex
+	log logr.Logger
 }
 
 func (e *DefaultADCExecutor) Execute(ctx context.Context, mode string, config adctypes.Config, args []string) error {
@@ -63,7 +63,7 @@
 
 	for _, addr := range config.ServerAddrs {
 		if err := e.runForSingleServerWithTimeout(ctx, addr, mode, config, args); err != nil {
-			log.Errorw("failed to run adc for server", zap.String("server", addr), zap.Error(err))
+			e.log.Error(err, "failed to run adc for server", "server", addr)
 			var execErr types.ADCExecutionServerAddrError
 			if errors.As(err, &execErr) {
 				execErrs.FailedErrors = append(execErrs.FailedErrors, execErr)
@@ -103,9 +103,9 @@
 	cmd.Stderr = &stderr
 	cmd.Env = append(os.Environ(), env...)
 
-	log.Debugw("running adc command",
-		zap.String("command", strings.Join(cmd.Args, " ")),
-		zap.Strings("env", filterSensitiveEnv(env)),
+	e.log.V(1).Info("running adc command",
+		"command", strings.Join(cmd.Args, " "),
+		"env", filterSensitiveEnv(env),
 	)
 
 	if err := cmd.Run(); err != nil {
@@ -114,22 +114,21 @@
 
 	result, err := e.handleOutput(stdout.Bytes())
 	if err != nil {
-		log.Errorw("failed to handle adc output",
-			zap.Error(err),
-			zap.String("stdout", stdout.String()),
-			zap.String("stderr", stderr.String()),
-		)
+		e.log.Error(err, "failed to handle adc output",
+			"stdout", stdout.String(),
+			"stderr", stderr.String())
 		return fmt.Errorf("failed to handle adc output: %w", err)
 	}
 	if result.FailedCount > 0 && len(result.Failed) > 0 {
-		log.Errorw("adc sync failed", zap.Any("result", result))
+		reason := result.Failed[0].Reason
+		e.log.Error(fmt.Errorf("adc sync failed: %s", reason), "adc sync failed", "result", result)
 		return types.ADCExecutionServerAddrError{
 			ServerAddr:     serverAddr,
-			Err:            result.Failed[0].Reason,
+			Err:            reason,
 			FailedStatuses: result.Failed,
 		}
 	}
-	log.Debugw("adc sync success", zap.Any("result", result))
+	e.log.V(1).Info("adc sync success", "result", result)
 	return nil
 }
 
@@ -161,28 +160,19 @@
 	if errMsg == "" {
 		errMsg = string(stdout)
 	}
-	log.Errorw("failed to run adc",
-		zap.Error(runErr),
-		zap.String("output", string(stdout)),
-		zap.String("stderr", string(stderr)),
-	)
+	e.log.Error(runErr, "failed to run adc", "output", string(stdout), "stderr", string(stderr))
 	return errors.New("failed to sync resources: " + errMsg + ", exit err: " + runErr.Error())
 }
 
 func (e *DefaultADCExecutor) handleOutput(output []byte) (*adctypes.SyncResult, error) {
+	e.log.V(1).Info("adc command output", "output", string(output))
 	var result adctypes.SyncResult
-	log.Debugw("adc output", zap.String("output", string(output)))
 	if lines := bytes.Split(output, []byte{'\n'}); len(lines) > 0 {
 		output = lines[len(lines)-1]
 	}
 	if err := json.Unmarshal(output, &result); err != nil {
-		log.Errorw("failed to unmarshal adc output",
-			zap.Error(err),
-			zap.String("stdout", string(output)),
-		)
-		return nil, errors.New("failed to parse adc result: " + err.Error())
+		return nil, errors.New("failed to unmarshal response: " + string(output) + ", err: " + err.Error())
 	}
-
 	return &result, nil
 }
 
@@ -226,11 +216,12 @@
 type HTTPADCExecutor struct {
 	httpClient *http.Client
 	serverURL  string
+	log        logr.Logger
 }
 
 // NewHTTPADCExecutor creates a new HTTPADCExecutor with the specified ADC Server URL.
 // serverURL can be "http(s)://host:port" or "unix:///path/to/socket" or "unix:/path/to/socket".
-func NewHTTPADCExecutor(serverURL string, timeout time.Duration) *HTTPADCExecutor {
+func NewHTTPADCExecutor(log logr.Logger, serverURL string, timeout time.Duration) *HTTPADCExecutor {
 	httpClient := &http.Client{
 		Timeout: timeout,
 	}
@@ -254,6 +245,7 @@
 	return &HTTPADCExecutor{
 		httpClient: httpClient,
 		serverURL:  serverURL,
+		log:        log.WithName("executor"),
 	}
 }
 
@@ -274,11 +266,11 @@
 		}
 		return config.ServerAddrs
 	}()
-	log.Debugw("running http sync", zap.Strings("serverAddrs", serverAddrs), zap.String("mode", mode))
+	e.log.V(1).Info("running http sync", "serverAddrs", serverAddrs, "mode", mode)
 
 	for _, addr := range serverAddrs {
 		if err := e.runHTTPSyncForSingleServer(ctx, addr, mode, config, args); err != nil {
-			log.Errorw("failed to run http sync for server", zap.String("server", addr), zap.Error(err))
+			e.log.Error(err, "failed to run http sync for server", "server", addr)
 			var execErr types.ADCExecutionServerAddrError
 			if errors.As(err, &execErr) {
 				execErrs.FailedErrors = append(execErrs.FailedErrors, execErr)
@@ -326,7 +318,7 @@
 	}
 	defer func() {
 		if closeErr := resp.Body.Close(); closeErr != nil {
-			log.Warnw("failed to close response body", zap.Error(closeErr))
+			e.log.Error(closeErr, "failed to close response body")
 		}
 	}()
 
@@ -405,21 +397,21 @@
 		},
 	}
 
+	e.log.V(1).Info("prepared request body", "body", reqBody)
+
 	jsonData, err := json.Marshal(reqBody)
 	if err != nil {
 		return nil, fmt.Errorf("failed to marshal request body: %w", err)
 	}
 
-	log.Debugw("request body", zap.String("body", string(jsonData)))
-
-	log.Debugw("sending HTTP request to ADC Server",
-		zap.String("url", e.serverURL+"/sync"),
-		zap.String("server", serverAddr),
-		zap.String("mode", mode),
-		zap.String("cacheKey", config.Name),
-		zap.Any("labelSelector", labels),
-		zap.Strings("includeResourceType", types),
-		zap.Bool("tlsSkipVerify", !tlsVerify),
+	e.log.V(1).Info("sending HTTP request to ADC Server",
+		"url", e.serverURL+"/sync",
+		"server", serverAddr,
+		"mode", mode,
+		"cacheKey", config.Name,
+		"labelSelector", labels,
+		"includeResourceType", types,
+		"tlsSkipVerify", !tlsVerify,
 	)
 
 	// Create HTTP request
@@ -439,10 +431,10 @@
 		return fmt.Errorf("failed to read response body: %w", err)
 	}
 
-	log.Debugw("received HTTP response from ADC Server",
-		zap.String("server", serverAddr),
-		zap.Int("status", resp.StatusCode),
-		zap.String("response", string(body)),
+	e.log.V(1).Info("received HTTP response from ADC Server",
+		"server", serverAddr,
+		"status", resp.StatusCode,
+		"response", string(body),
 	)
 
 	// not only 200, HTTP 202 is also accepted
@@ -456,23 +448,20 @@
 	// Parse response body
 	var result adctypes.SyncResult
 	if err := json.Unmarshal(body, &result); err != nil {
-		log.Errorw("failed to unmarshal ADC Server response",
-			zap.Error(err),
-			zap.String("response", string(body)),
-		)
-		return fmt.Errorf("failed to parse ADC Server response: %w", err)
+		return fmt.Errorf("failed to unmarshal response body: %s, err: %w", string(body), err)
 	}
 
 	// Check for sync failures
 	if result.FailedCount > 0 && len(result.Failed) > 0 {
-		log.Errorw("ADC Server sync failed", zap.Any("result", result))
+		reason := result.Failed[0].Reason
+		e.log.Error(fmt.Errorf("ADC Server sync failed: %s", reason), "ADC Server sync failed", "result", result)
 		return types.ADCExecutionServerAddrError{
 			ServerAddr:     serverAddr,
-			Err:            result.Failed[0].Reason,
+			Err:            reason,
 			FailedStatuses: result.Failed,
 		}
 	}
 
-	log.Debugw("ADC Server sync success", zap.Any("result", result))
+	e.log.V(1).Info("ADC Server sync success", "result", result)
 	return nil
 }
diff --git a/internal/adc/translator/apisixroute.go b/internal/adc/translator/apisixroute.go
index 5e2e123..58a162c 100644
--- a/internal/adc/translator/apisixroute.go
+++ b/internal/adc/translator/apisixroute.go
@@ -23,9 +23,7 @@
 	"fmt"
 	"strconv"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/pkg/errors"
-	"go.uber.org/zap"
 	v1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
@@ -232,7 +230,7 @@
 		}
 		au, ok := tctx.Upstreams[upsNN]
 		if !ok {
-			log.Debugw("failed to retrieve ApisixUpstream from tctx", zap.Any("ApisixUpstream", upsNN))
+			t.Log.V(1).Info("failed to retrieve ApisixUpstream from tctx", "ApisixUpstream", upsNN.String())
 			continue
 		}
 		upstream, err := t.translateApisixUpstream(tctx, au)
diff --git a/internal/adc/translator/apisixupstream.go b/internal/adc/translator/apisixupstream.go
index 7aec7ba..86a39e6 100644
--- a/internal/adc/translator/apisixupstream.go
+++ b/internal/adc/translator/apisixupstream.go
@@ -22,9 +22,7 @@
 	"fmt"
 	"maps"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/pkg/errors"
-	"go.uber.org/zap"
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/types"
 
@@ -39,7 +37,7 @@
 }
 
 func (t *Translator) translateApisixUpstreamForPort(tctx *provider.TranslateContext, au *apiv2.ApisixUpstream, port *int32) (*adc.Upstream, error) {
-	log.Debugw("translating ApisixUpstream", zap.Any("apisixupstream", au), zap.Int32p("port", port))
+	t.Log.V(1).Info("translating ApisixUpstream", "apisixupstream", au, "port", port)
 
 	ups := adc.NewDefaultUpstream()
 	ups.Name = composeExternalUpstreamName(au)
@@ -70,7 +68,7 @@
 		}
 	}
 
-	log.Debugw("translated ApisixUpstream", zap.Any("upstream", ups))
+	t.Log.V(1).Info("translated ApisixUpstream", "upstream", ups)
 
 	return ups, nil
 }
diff --git a/internal/adc/translator/gateway.go b/internal/adc/translator/gateway.go
index 43fc765..db28484 100644
--- a/internal/adc/translator/gateway.go
+++ b/internal/adc/translator/gateway.go
@@ -24,9 +24,7 @@
 	"fmt"
 	"slices"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/pkg/errors"
-	"go.uber.org/zap"
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/types"
 	gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
@@ -57,7 +55,7 @@
 	rk := utils.NamespacedNameKind(obj)
 	gatewayProxy, ok := tctx.GatewayProxies[rk]
 	if !ok {
-		log.Debugw("no GatewayProxy found for Gateway", zap.String("gateway", obj.Name))
+		t.Log.V(1).Info("no GatewayProxy found for Gateway", "gateway", obj.Name)
 		return result, nil
 	}
 
@@ -92,17 +90,18 @@
 					Snis: []string{},
 				}
 				name := listener.TLS.CertificateRefs[0].Name
-				secret := tctx.Secrets[types.NamespacedName{Namespace: ns, Name: string(ref.Name)}]
+				secretNN := types.NamespacedName{Namespace: ns, Name: string(ref.Name)}
+				secret := tctx.Secrets[secretNN]
 				if secret == nil {
 					continue
 				}
 				if secret.Data == nil {
-					log.Errorw("secret data is nil", zap.Any("secret", secret))
+					t.Log.Error(errors.New("secret data is nil"), "failed to get secret data", "secret", secretNN)
 					return nil, fmt.Errorf("no secret data found for %s/%s", ns, name)
 				}
 				cert, key, err := extractKeyPair(secret, true)
 				if err != nil {
-					log.Errorw("failed to extract key pair", zap.Error(err), zap.Any("secret", secret))
+					t.Log.Error(err, "extract key pair", "secret", secretNN)
 					return nil, err
 				}
 				sslObj.Certificates = append(sslObj.Certificates, adctypes.Certificate{
@@ -118,14 +117,14 @@
 						return nil, err
 					}
 					if len(hosts) == 0 {
-						log.Warnw("no valid hostname found in certificate", zap.String("secret", secret.Namespace+"/"+secret.Name))
+						t.Log.Info("no valid hostname found in certificate", "secret", secretNN.String())
 						continue
 					}
 					sslObj.Snis = append(sslObj.Snis, hosts...)
 				}
 				// Note: use cert as id to avoid duplicate certificate across ssl objects
 				sslObj.ID = id.GenID(string(cert))
-				log.Debugw("generated ssl id", zap.String("ssl id", sslObj.ID), zap.String("secret", secret.Namespace+"/"+secret.Name))
+				t.Log.V(1).Info("generated ssl id", "ssl id", sslObj.ID, "secret", secretNN.String())
 				sslObj.Labels = label.GenLabel(obj)
 				sslObjs = append(sslObjs, sslObj)
 			}
@@ -219,13 +218,13 @@
 		pluginConfig := map[string]any{}
 		if len(plugin.Config.Raw) > 0 {
 			if err := json.Unmarshal(plugin.Config.Raw, &pluginConfig); err != nil {
-				log.Errorw("gateway proxy plugin config unmarshal failed", zap.Error(err), zap.String("plugin", pluginName))
+				t.Log.Error(err, "gateway proxy plugin config unmarshal failed", "plugin", pluginName)
 				continue
 			}
 		}
 		plugins[pluginName] = pluginConfig
 	}
-	log.Debugw("fill plugins for gateway proxy", zap.Any("plugins", plugins))
+	t.Log.V(1).Info("fill plugins for gateway proxy", "plugins", plugins)
 }
 
 func (t *Translator) fillPluginMetadataFromGatewayProxy(pluginMetadata adctypes.PluginMetadata, gatewayProxy *v1alpha1.GatewayProxy) {
@@ -235,10 +234,10 @@
 	for pluginName, plugin := range gatewayProxy.Spec.PluginMetadata {
 		var pluginConfig map[string]any
 		if err := json.Unmarshal(plugin.Raw, &pluginConfig); err != nil {
-			log.Errorw("gateway proxy plugin_metadata unmarshal failed", zap.Error(err), zap.Any("plugin", pluginName), zap.String("config", string(plugin.Raw)))
+			t.Log.Error(err, "gateway proxy plugin_metadata unmarshal failed", "plugin", pluginName, "config", string(plugin.Raw))
 			continue
 		}
-		log.Debugw("fill plugin_metadata for gateway proxy", zap.String("plugin", pluginName), zap.Any("config", pluginConfig))
+		t.Log.V(1).Info("fill plugin_metadata for gateway proxy", "plugin", pluginName, "config", pluginConfig)
 		pluginMetadata[pluginName] = pluginConfig
 	}
 }
diff --git a/internal/adc/translator/gatewayproxy.go b/internal/adc/translator/gatewayproxy.go
index 8b7fb67..6636816 100644
--- a/internal/adc/translator/gatewayproxy.go
+++ b/internal/adc/translator/gatewayproxy.go
@@ -22,9 +22,7 @@
 	"net"
 	"strconv"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/pkg/errors"
-	"go.uber.org/zap"
 	corev1 "k8s.io/api/core/v1"
 	discoveryv1 "k8s.io/api/discovery/v1"
 	k8stypes "k8s.io/apimachinery/pkg/types"
@@ -108,7 +106,7 @@
 				},
 			}, func(endpoint *discoveryv1.Endpoint) bool {
 				if endpoint.Conditions.Terminating != nil && *endpoint.Conditions.Terminating {
-					log.Debugw("skip terminating endpoint", zap.Any("endpoint", endpoint))
+					t.Log.V(1).Info("skip terminating endpoint", "endpoint", endpoint)
 					return false
 				}
 				return true
@@ -130,7 +128,7 @@
 			config.ServerAddrs = []string{serverAddr}
 		}
 
-		log.Debugw("add server address to config.ServiceAddrs", zap.Strings("config.ServerAddrs", config.ServerAddrs))
+		t.Log.V(1).Info("add server address to config.ServiceAddrs", "config.ServerAddrs", config.ServerAddrs)
 	}
 
 	return &config, nil
diff --git a/internal/adc/translator/globalrule.go b/internal/adc/translator/globalrule.go
index 692321d..89f1626 100644
--- a/internal/adc/translator/globalrule.go
+++ b/internal/adc/translator/globalrule.go
@@ -20,9 +20,6 @@
 import (
 	"encoding/json"
 
-	"github.com/api7/gopkg/pkg/log"
-	"go.uber.org/zap"
-
 	adctypes "github.com/apache/apisix-ingress-controller/api/adc"
 	apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
 	"github.com/apache/apisix-ingress-controller/internal/provider"
@@ -30,10 +27,7 @@
 
 // TranslateApisixGlobalRule translates ApisixGlobalRule to APISIX GlobalRule
 func (t *Translator) TranslateApisixGlobalRule(tctx *provider.TranslateContext, obj *apiv2.ApisixGlobalRule) (*TranslateResult, error) {
-	log.Debugw("translating ApisixGlobalRule",
-		zap.String("namespace", obj.Namespace),
-		zap.String("name", obj.Name),
-	)
+	t.Log.V(1).Info("translating ApisixGlobalRule", "namespace", obj.Namespace, "name", obj.Name)
 
 	// Create global rule plugins
 	plugins := make(adctypes.Plugins)
@@ -48,7 +42,7 @@
 		pluginConfig := make(map[string]any)
 		if len(plugin.Config.Raw) > 0 {
 			if err := json.Unmarshal(plugin.Config.Raw, &pluginConfig); err != nil {
-				log.Errorw("failed to unmarshal plugin config", zap.String("plugin", plugin.Name), zap.Error(err))
+				t.Log.Error(err, "failed to unmarshal plugin config", "plugin", plugin.Name)
 				continue
 			}
 		}
diff --git a/internal/adc/translator/httproute.go b/internal/adc/translator/httproute.go
index d88b32c..7d829b1 100644
--- a/internal/adc/translator/httproute.go
+++ b/internal/adc/translator/httproute.go
@@ -22,9 +22,7 @@
 	"fmt"
 	"strings"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/pkg/errors"
-	"go.uber.org/zap"
 	corev1 "k8s.io/api/core/v1"
 	discoveryv1 "k8s.io/api/discovery/v1"
 	"k8s.io/apimachinery/pkg/types"
@@ -84,13 +82,13 @@
 			pluginconfig := make(map[string]any)
 			if len(plugin.Config.Raw) > 0 {
 				if err := json.Unmarshal(plugin.Config.Raw, &pluginconfig); err != nil {
-					log.Errorw("plugin config unmarshal failed", zap.Error(err))
+					t.Log.Error(err, "plugin config unmarshal failed", "plugin", plugin.Name)
 					continue
 				}
 			}
 			plugins[pluginName] = pluginconfig
 		}
-		log.Debugw("fill plugin from extension ref", zap.Any("plugins", plugins))
+		t.Log.V(1).Info("fill plugin from extension ref", "plugins", plugins)
 	}
 }
 
@@ -322,7 +320,7 @@
 			for _, data := range policy.Spec.Vars {
 				var v []adctypes.StringOrSlice
 				if err := json.Unmarshal(data.Raw, &v); err != nil {
-					log.Errorw("failed to unmarshal spec.Vars item to []StringOrSlice", zap.Error(err), zap.String("data", string(data.Raw)))
+					t.Log.Error(err, "failed to unmarshal spec.Vars item to []StringOrSlice", "data", string(data.Raw))
 					// todo: update status
 					continue
 				}
@@ -344,6 +342,7 @@
 			}
 			for _, endpoint := range endpointSlice.Endpoints {
 				if endpointFilter != nil && !endpointFilter(&endpoint) {
+					t.Log.V(1).Info("skip endpoint by filter", "endpoint", endpoint)
 					continue
 				}
 				for _, addr := range endpoint.Addresses {
@@ -366,7 +365,6 @@
 
 func DefaultEndpointFilter(endpoint *discoveryv1.Endpoint) bool {
 	if endpoint.Conditions.Ready != nil && !*endpoint.Conditions.Ready {
-		log.Debugw("skip not ready endpoint", zap.Any("endpoint", endpoint))
 		return false
 	}
 	return true
diff --git a/internal/adc/translator/ingressclass.go b/internal/adc/translator/ingressclass.go
index d914259..064bd77 100644
--- a/internal/adc/translator/ingressclass.go
+++ b/internal/adc/translator/ingressclass.go
@@ -18,8 +18,6 @@
 package translator
 
 import (
-	"github.com/api7/gopkg/pkg/log"
-	"go.uber.org/zap"
 	networkingv1 "k8s.io/api/networking/v1"
 
 	adctypes "github.com/apache/apisix-ingress-controller/api/adc"
@@ -33,7 +31,7 @@
 	rk := utils.NamespacedNameKind(obj)
 	gatewayProxy, ok := tctx.GatewayProxies[rk]
 	if !ok {
-		log.Debugw("no GatewayProxy found for IngressClass", zap.String("ingressclass", obj.Name))
+		t.Log.V(1).Info("no GatewayProxy found for IngressClass", "ingressclass", obj.Name)
 		return result, nil
 	}
 
diff --git a/internal/adc/translator/translator.go b/internal/adc/translator/translator.go
index 4c9bf0d..aeaef25 100644
--- a/internal/adc/translator/translator.go
+++ b/internal/adc/translator/translator.go
@@ -29,7 +29,7 @@
 
 func NewTranslator(log logr.Logger) *Translator {
 	return &Translator{
-		Log: log,
+		Log: log.WithName("translator"),
 	}
 }
 
diff --git a/internal/controller/apisixroute_controller.go b/internal/controller/apisixroute_controller.go
index dd57202..c6e3afd 100644
--- a/internal/controller/apisixroute_controller.go
+++ b/internal/controller/apisixroute_controller.go
@@ -24,9 +24,7 @@
 	"fmt"
 	"slices"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/go-logr/logr"
-	"go.uber.org/zap"
 	corev1 "k8s.io/api/core/v1"
 	discoveryv1 "k8s.io/api/discovery/v1"
 	networkingv1 "k8s.io/api/networking/v1"
@@ -409,9 +407,9 @@
 	}
 
 	// try to get apisixupstream with the same name as the backend service
-	log.Debugw("try to get apisixupstream with the same name as the backend service", zap.Stringer("Service", serviceNN))
+	r.Log.V(1).Info("try to get apisixupstream with the same name as the backend service", "Service", serviceNN)
 	if err := r.Get(tctx, serviceNN, &au); err != nil {
-		log.Debugw("no ApisixUpstream with the same name as the backend service found", zap.Stringer("Service", serviceNN), zap.Error(err))
+		r.Log.V(1).Info("no ApisixUpstream with the same name as the backend service found", "Service", serviceNN, "Error", err)
 		if err = client.IgnoreNotFound(err); err != nil {
 			return err
 		}
diff --git a/internal/controller/gatewayproxy_controller.go b/internal/controller/gatewayproxy_controller.go
index 7b27d31..b2dd798 100644
--- a/internal/controller/gatewayproxy_controller.go
+++ b/internal/controller/gatewayproxy_controller.go
@@ -100,7 +100,7 @@
 	if providerService == nil {
 		tctx.EndpointSlices[req.NamespacedName] = nil
 	} else {
-		if err := addProviderEndpointsToTranslateContext(tctx, r.Client, types.NamespacedName{
+		if err := addProviderEndpointsToTranslateContext(tctx, r.Client, r.Log, types.NamespacedName{
 			Namespace: gp.Namespace,
 			Name:      providerService.Name,
 		}); err != nil {
diff --git a/internal/controller/grpcroute_controller.go b/internal/controller/grpcroute_controller.go
index 782f98f..3b42341 100644
--- a/internal/controller/grpcroute_controller.go
+++ b/internal/controller/grpcroute_controller.go
@@ -182,7 +182,7 @@
 		msg:    "Route is accepted",
 	}
 
-	gateways, err := ParseRouteParentRefs(ctx, r.Client, gr, gr.Spec.ParentRefs)
+	gateways, err := ParseRouteParentRefs(ctx, r.Client, r.Log, gr, gr.Spec.ParentRefs)
 	if err != nil {
 		return ctrl.Result{}, err
 	}
diff --git a/internal/controller/httproute_controller.go b/internal/controller/httproute_controller.go
index 8cd7b50..1c449e7 100644
--- a/internal/controller/httproute_controller.go
+++ b/internal/controller/httproute_controller.go
@@ -22,10 +22,8 @@
 	"context"
 	"fmt"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/go-logr/logr"
 	"github.com/pkg/errors"
-	"go.uber.org/zap"
 	"golang.org/x/exp/slices"
 	corev1 "k8s.io/api/core/v1"
 	discoveryv1 "k8s.io/api/discovery/v1"
@@ -167,7 +165,7 @@
 		msg:    "Route is accepted",
 	}
 
-	gateways, err := ParseRouteParentRefs(ctx, r.Client, hr, hr.Spec.ParentRefs)
+	gateways, err := ParseRouteParentRefs(ctx, r.Client, r.Log, hr, hr.Spec.ParentRefs)
 	if err != nil {
 		return ctrl.Result{}, err
 	}
@@ -250,7 +248,7 @@
 	if isRouteAccepted(gateways) && err == nil {
 		routeToUpdate := hr
 		if filteredHTTPRoute != nil {
-			log.Debugw("filteredHTTPRoute", zap.Any("filteredHTTPRoute", filteredHTTPRoute))
+			r.Log.V(1).Info("filtered httproute", "httproute", filteredHTTPRoute)
 			routeToUpdate = filteredHTTPRoute
 		}
 		if err := r.Provider.Update(ctx, tctx, routeToUpdate); err != nil {
diff --git a/internal/controller/ingress_controller.go b/internal/controller/ingress_controller.go
index 8ef3d73..5fe611d 100644
--- a/internal/controller/ingress_controller.go
+++ b/internal/controller/ingress_controller.go
@@ -22,9 +22,7 @@
 	"fmt"
 	"reflect"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/go-logr/logr"
-	"go.uber.org/zap"
 	corev1 "k8s.io/api/core/v1"
 	discoveryv1 "k8s.io/api/discovery/v1"
 	networkingv1 "k8s.io/api/networking/v1"
@@ -467,7 +465,7 @@
 		}
 
 		if secret.Data == nil {
-			log.Warnw("secret data is nil", zap.String("secret", secret.Namespace+"/"+secret.Name))
+			r.Log.Error(fmt.Errorf("no secret data found"), "secret data is nil", "namespace", ingress.Namespace, "name", tls.SecretName)
 			continue
 		}
 
@@ -571,7 +569,7 @@
 
 	gatewayProxy, ok := tctx.GatewayProxies[ingressClassKind]
 	if !ok {
-		log.Debugw("no gateway proxy found for ingress class", zap.String("ingressClass", ingressClass.Name))
+		r.Log.V(1).Info("no gateway proxy found for ingress class", "ingressClass", ingressClass.Name)
 		return nil
 	}
 
diff --git a/internal/controller/ingressclass_controller.go b/internal/controller/ingressclass_controller.go
index fe11b7f..5594ee6 100644
--- a/internal/controller/ingressclass_controller.go
+++ b/internal/controller/ingressclass_controller.go
@@ -228,7 +228,7 @@
 	}
 
 	if service := gatewayProxy.Spec.Provider.ControlPlane.Service; service != nil {
-		if err := addProviderEndpointsToTranslateContext(tctx, r.Client, types.NamespacedName{
+		if err := addProviderEndpointsToTranslateContext(tctx, r.Client, r.Log, types.NamespacedName{
 			Namespace: gatewayProxy.GetNamespace(),
 			Name:      service.Name,
 		}); err != nil {
diff --git a/internal/controller/tcproute_controller.go b/internal/controller/tcproute_controller.go
index 271198a..125a14a 100644
--- a/internal/controller/tcproute_controller.go
+++ b/internal/controller/tcproute_controller.go
@@ -255,7 +255,7 @@
 		msg:    "Route is accepted",
 	}
 
-	gateways, err := ParseRouteParentRefs(ctx, r.Client, tr, tr.Spec.ParentRefs)
+	gateways, err := ParseRouteParentRefs(ctx, r.Client, r.Log, tr, tr.Spec.ParentRefs)
 	if err != nil {
 		return ctrl.Result{}, err
 	}
diff --git a/internal/controller/udproute_controller.go b/internal/controller/udproute_controller.go
index 88b1136..2a4a7a4 100644
--- a/internal/controller/udproute_controller.go
+++ b/internal/controller/udproute_controller.go
@@ -255,7 +255,7 @@
 		msg:    "Route is accepted",
 	}
 
-	gateways, err := ParseRouteParentRefs(ctx, r.Client, tr, tr.Spec.ParentRefs)
+	gateways, err := ParseRouteParentRefs(ctx, r.Client, r.Log, tr, tr.Spec.ParentRefs)
 	if err != nil {
 		return ctrl.Result{}, err
 	}
diff --git a/internal/controller/utils.go b/internal/controller/utils.go
index 4a0e9a6..530e7c4 100644
--- a/internal/controller/utils.go
+++ b/internal/controller/utils.go
@@ -28,10 +28,8 @@
 	"slices"
 	"strings"
 
-	"github.com/api7/gopkg/pkg/log"
 	"github.com/go-logr/logr"
 	"github.com/samber/lo"
-	"go.uber.org/zap"
 	corev1 "k8s.io/api/core/v1"
 	discoveryv1 "k8s.io/api/discovery/v1"
 	networkingv1 "k8s.io/api/networking/v1"
@@ -318,7 +316,11 @@
 }
 
 func ParseRouteParentRefs(
-	ctx context.Context, mgrc client.Client, route client.Object, parentRefs []gatewayv1.ParentReference,
+	ctx context.Context,
+	mgrc client.Client,
+	log logr.Logger,
+	route client.Object,
+	parentRefs []gatewayv1.ParentReference,
 ) ([]RouteParentRefContext, error) {
 	gateways := make([]RouteParentRefContext, 0)
 	for _, parentRef := range parentRefs {
@@ -387,12 +389,10 @@
 			listenerName = string(listener.Name)
 			ok, err := routeMatchesListenerAllowedRoutes(ctx, mgrc, route, listener.AllowedRoutes, gateway.Namespace, parentRef.Namespace)
 			if err != nil {
-				log.Warnw("failed matching listener to a route for gateway",
-					zap.String("listener", string(listener.Name)),
-					zap.String("route", route.GetName()),
-					zap.String("gateway", gateway.Name),
-					zap.Error(err),
-				)
+				log.Error(err, "failed matching listener to a route for gateway",
+					"listener", string(listener.Name),
+					"route", route.GetName(),
+					"gateway", gateway.Name)
 			}
 			if !ok {
 				reason = gatewayv1.RouteReasonNotAllowedByListeners
@@ -975,7 +975,7 @@
 					}
 
 					if cp.Service != nil {
-						if err := addProviderEndpointsToTranslateContext(tctx, r, k8stypes.NamespacedName{
+						if err := addProviderEndpointsToTranslateContext(tctx, r, log, k8stypes.NamespacedName{
 							Namespace: gatewayProxy.GetNamespace(),
 							Name:      cp.Service.Name,
 						}); err != nil {
@@ -1031,7 +1031,6 @@
 		}
 	}
 
-	log.Debugw("filtered hostnames", zap.Any("httpRouteHostnames", httpRoute.Spec.Hostnames), zap.Any("hostnames", filteredHostnames))
 	httpRoute.Spec.Hostnames = filteredHostnames
 	return httpRoute, nil
 }
@@ -1345,7 +1344,7 @@
 
 				// process control plane provider service
 				if cp.Service != nil {
-					if err := addProviderEndpointsToTranslateContext(tctx, c, client.ObjectKey{
+					if err := addProviderEndpointsToTranslateContext(tctx, c, log, client.ObjectKey{
 						Namespace: gatewayProxy.GetNamespace(),
 						Name:      cp.Service.Name,
 					}); err != nil {
@@ -1411,13 +1410,13 @@
 	return distinctRequests
 }
 
-func addProviderEndpointsToTranslateContext(tctx *provider.TranslateContext, c client.Client, serviceNN k8stypes.NamespacedName) error {
-	log.Debugw("to process provider endpoints by provider.service", zap.Any("service", serviceNN))
+func addProviderEndpointsToTranslateContext(tctx *provider.TranslateContext, c client.Client, log logr.Logger, serviceNN k8stypes.NamespacedName) error {
+	log.V(1).Info("to process provider endpoints by provider.service", "service", serviceNN)
 	var (
 		service corev1.Service
 	)
 	if err := c.Get(tctx, serviceNN, &service); err != nil {
-		log.Errorw("failed to get service from GatewayProxy provider", zap.Error(err), zap.Any("key", serviceNN))
+		log.Error(err, "failed to get service from GatewayProxy provider", "service", serviceNN)
 		return err
 	}
 	tctx.Services[serviceNN] = &service
@@ -1431,7 +1430,8 @@
 		client.MatchingLabels{
 			discoveryv1.LabelServiceName: serviceNN.Name,
 		}); err != nil {
-		log.Errorw("failed to get endpoints for GatewayProxy provider", zap.Error(err), zap.Any("endpoints", serviceNN))
+		log.Error(err, "failed to get endpoints for GatewayProxy provider", "endpoints", serviceNN)
+
 		return err
 	}
 	tctx.EndpointSlices[serviceNN] = esList.Items
diff --git a/internal/manager/readiness/manager.go b/internal/manager/readiness/manager.go
index 7ba4b83..eca380e 100644
--- a/internal/manager/readiness/manager.go
+++ b/internal/manager/readiness/manager.go
@@ -24,8 +24,7 @@
 	"sync/atomic"
 	"time"
 
-	"github.com/api7/gopkg/pkg/log"
-	"go.uber.org/zap"
+	"github.com/go-logr/logr"
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 	"k8s.io/apimachinery/pkg/runtime/schema"
 	k8stypes "k8s.io/apimachinery/pkg/types"
@@ -79,16 +78,19 @@
 	done      chan struct{}
 
 	isReady atomic.Bool
+
+	log logr.Logger
 }
 
 // ReadinessManager tracks readiness of specific resources across the cluster.
-func NewReadinessManager(client client.Client) ReadinessManager {
+func NewReadinessManager(client client.Client, log logr.Logger) ReadinessManager {
 	return &readinessManager{
 		client:  client,
 		state:   make(map[schema.GroupVersionKind]map[k8stypes.NamespacedName]struct{}),
 		started: make(chan struct{}),
 		done:    make(chan struct{}),
 		isReady: atomic.Bool{},
+		log:     log.WithName("readiness"),
 	}
 }
 
@@ -123,7 +125,7 @@
 					})
 				}
 				if len(expected) > 0 {
-					log.Debugw("registering readiness state", zap.Any("gvk", gvk), zap.Any("expected", expected))
+					r.log.V(1).Info("registering readiness state", "gvk", gvk, "expected", expected)
 					r.registerState(gvk, expected)
 				}
 			}
diff --git a/internal/manager/run.go b/internal/manager/run.go
index 6adde7d..fe16baf 100644
--- a/internal/manager/run.go
+++ b/internal/manager/run.go
@@ -164,7 +164,7 @@
 		return err
 	}
 
-	readier := readiness.NewReadinessManager(mgr.GetClient())
+	readier := readiness.NewReadinessManager(mgr.GetClient(), logger)
 	registerReadinessGVK(mgr.GetClient(), readier)
 
 	if err := mgr.Add(readier); err != nil {
@@ -179,12 +179,13 @@
 
 	providerType := string(config.ControllerConfig.ProviderConfig.Type)
 
-	provider, err := provider.New(providerType, updater.Writer(), readier, &provider.Options{
+	providerOptions := &provider.Options{
 		SyncTimeout:   config.ControllerConfig.ExecADCTimeout.Duration,
 		SyncPeriod:    config.ControllerConfig.ProviderConfig.SyncPeriod.Duration,
 		InitSyncDelay: config.ControllerConfig.ProviderConfig.InitSyncDelay.Duration,
 		BackendMode:   string(config.ControllerConfig.ProviderConfig.Type),
-	})
+	}
+	provider, err := provider.New(providerType, logger, updater.Writer(), readier, providerOptions)
 	if err != nil {
 		setupLog.Error(err, "unable to create provider")
 		return err
diff --git a/internal/provider/apisix/provider.go b/internal/provider/apisix/provider.go
index 188e6c2..64d694c 100644
--- a/internal/provider/apisix/provider.go
+++ b/internal/provider/apisix/provider.go
@@ -23,8 +23,7 @@
 	"sync"
 	"time"
 
-	"github.com/api7/gopkg/pkg/log"
-	"go.uber.org/zap"
+	"github.com/go-logr/logr"
 	networkingv1 "k8s.io/api/networking/v1"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
@@ -67,16 +66,17 @@
 	syncCh chan struct{}
 
 	client *adcclient.Client
+	log    logr.Logger
 }
 
-func New(updater status.Updater, readier readiness.ReadinessManager, opts ...provider.Option) (provider.Provider, error) {
+func New(log logr.Logger, updater status.Updater, readier readiness.ReadinessManager, opts ...provider.Option) (provider.Provider, error) {
 	o := provider.Options{}
 	o.ApplyOptions(opts)
 	if o.BackendMode == "" {
 		o.BackendMode = ProviderTypeAPISIX
 	}
 
-	cli, err := adcclient.New(o.BackendMode, o.SyncTimeout)
+	cli, err := adcclient.New(log, o.BackendMode, o.SyncTimeout)
 	if err != nil {
 		return nil, err
 	}
@@ -84,10 +84,11 @@
 	return &apisixProvider{
 		client:     cli,
 		Options:    o,
-		translator: &translator.Translator{},
+		translator: translator.NewTranslator(log),
 		updater:    updater,
 		readier:    readier,
 		syncCh:     make(chan struct{}, 1),
+		log:        log.WithName("provider"),
 	}, nil
 }
 
@@ -96,7 +97,7 @@
 }
 
 func (d *apisixProvider) Update(ctx context.Context, tctx *provider.TranslateContext, obj client.Object) error {
-	log.Debugw("updating object", zap.Any("object", obj))
+	d.log.V(1).Info("updating object", "object", obj)
 	var (
 		result        *translator.TranslateResult
 		resourceTypes []string
@@ -177,13 +178,13 @@
 			Consumers:      result.Consumers,
 		},
 	}
-	log.Debugw("updating config", zap.Any("task", task))
+	d.log.V(1).Info("updating config", "task", task)
 
 	return d.client.UpdateConfig(ctx, task)
 }
 
 func (d *apisixProvider) Delete(ctx context.Context, obj client.Object) error {
-	log.Debugw("deleting object", zap.Any("object", obj))
+	d.log.V(1).Info("deleting object", "object", obj)
 
 	var resourceTypes []string
 	var labels map[string]string
@@ -270,7 +271,7 @@
 			return nil
 		}
 		if err := d.sync(ctx); err != nil {
-			log.Error(err)
+			d.log.Error(err, "failed to sync")
 			retrier.Next()
 		} else {
 			retrier.Reset()
@@ -294,7 +295,7 @@
 func (d *apisixProvider) handleADCExecutionErrors(statusesMap map[string]types.ADCExecutionErrors) {
 	statusUpdateMap := d.resolveADCExecutionErrors(statusesMap)
 	d.handleStatusUpdate(statusUpdateMap)
-	log.Debugw("handled ADC execution errors", zap.Any("status_record", statusesMap), zap.Any("status_update", statusUpdateMap))
+	d.log.V(1).Info("handled ADC execution errors", "status_record", statusesMap, "status_update", statusUpdateMap)
 }
 
 func (d *apisixProvider) NeedLeaderElection() bool {
diff --git a/internal/provider/apisix/status.go b/internal/provider/apisix/status.go
index 3bc3dcd..9a2824a 100644
--- a/internal/provider/apisix/status.go
+++ b/internal/provider/apisix/status.go
@@ -21,8 +21,6 @@
 	"fmt"
 	"strings"
 
-	"github.com/api7/gopkg/pkg/log"
-	"go.uber.org/zap"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
@@ -113,7 +111,7 @@
 		})
 	case types.KindHTTPRoute:
 		parentRefs := d.client.ConfigManager.GetConfigRefsByResourceKey(nnk)
-		log.Debugw("updating HTTPRoute status", zap.Any("parentRefs", parentRefs))
+		d.log.V(1).Info("updating HTTPRoute status", "parentRefs", parentRefs)
 		gatewayRefs := map[types.NamespacedNameKind]struct{}{}
 		for _, parentRef := range parentRefs {
 			if parentRef.Kind == types.KindGateway {
@@ -148,7 +146,7 @@
 		})
 	case types.KindUDPRoute:
 		parentRefs := d.client.ConfigManager.GetConfigRefsByResourceKey(nnk)
-		log.Debugw("updating UDPRoute status", zap.Any("parentRefs", parentRefs))
+		d.log.V(1).Info("updating UDPRoute status", "parentRefs", parentRefs)
 		gatewayRefs := map[types.NamespacedNameKind]struct{}{}
 		for _, parentRef := range parentRefs {
 			if parentRef.Kind == types.KindGateway {
@@ -183,7 +181,7 @@
 		})
 	case types.KindTCPRoute:
 		parentRefs := d.client.ConfigManager.GetConfigRefsByResourceKey(nnk)
-		log.Debugw("updating TCPRoute status", zap.Any("parentRefs", parentRefs))
+		d.log.V(1).Info("updating TCPRoute status", "parentRefs", parentRefs)
 		gatewayRefs := map[types.NamespacedNameKind]struct{}{}
 		for _, parentRef := range parentRefs {
 			if parentRef.Kind == types.KindGateway {
@@ -218,7 +216,7 @@
 		})
 	case types.KindGRPCRoute:
 		parentRefs := d.client.ConfigManager.GetConfigRefsByResourceKey(nnk)
-		log.Debugw("updating GRPCRoute status", zap.Any("parentRefs", parentRefs))
+		d.log.V(1).Info("updating GRPCRoute status", "parentRefs", parentRefs)
 		gatewayRefs := map[types.NamespacedNameKind]struct{}{}
 		for _, parentRef := range parentRefs {
 			if parentRef.Kind == types.KindGateway {
@@ -280,7 +278,7 @@
 ) {
 	resource, err := d.client.GetResources(configName)
 	if err != nil {
-		log.Errorw("failed to get resources from store", zap.String("configName", configName), zap.Error(err))
+		d.log.Error(err, "failed to get resources from store", "configName", configName)
 		return
 	}
 
@@ -298,7 +296,7 @@
 
 	globalRules, err := d.client.ListGlobalRules(configName)
 	if err != nil {
-		log.Errorw("failed to list global rules", zap.String("configName", configName), zap.Error(err))
+		d.log.Error(err, "failed to list global rules", "configName", configName)
 		return
 	}
 	for _, rule := range globalRules {
@@ -320,11 +318,10 @@
 		id := status.Event.ResourceID
 		labels, err := d.client.GetResourceLabel(configName, status.Event.ResourceType, id)
 		if err != nil {
-			log.Errorw("failed to get resource label",
-				zap.String("configName", configName),
-				zap.String("resourceType", status.Event.ResourceType),
-				zap.String("id", id),
-				zap.Error(err),
+			d.log.Error(err, "failed to get resource label",
+				"configName", configName,
+				"resourceType", status.Event.ResourceType,
+				"id", id,
 			)
 			continue
 		}
diff --git a/internal/provider/init/init.go b/internal/provider/init/init.go
index 3fc6891..b6ed9e9 100644
--- a/internal/provider/init/init.go
+++ b/internal/provider/init/init.go
@@ -22,13 +22,19 @@
 	"github.com/apache/apisix-ingress-controller/internal/manager/readiness"
 	"github.com/apache/apisix-ingress-controller/internal/provider"
 	"github.com/apache/apisix-ingress-controller/internal/provider/apisix"
+	"github.com/go-logr/logr"
 )
 
 func init() {
 	provider.Register("apisix", apisix.New)
-	provider.Register("apisix-standalone", func(statusUpdater status.Updater, readinessManager readiness.ReadinessManager, opts ...provider.Option) (provider.Provider, error) {
-		opts = append(opts, provider.WithBackendMode("apisix-standalone"))
-		opts = append(opts, provider.WithResolveEndpoints())
-		return apisix.New(statusUpdater, readinessManager, opts...)
-	})
+	provider.Register("apisix-standalone",
+		func(log logr.Logger,
+			statusUpdater status.Updater,
+			readinessManager readiness.ReadinessManager,
+			opts ...provider.Option,
+		) (provider.Provider, error) {
+			opts = append(opts, provider.WithBackendMode("apisix-standalone"))
+			opts = append(opts, provider.WithResolveEndpoints())
+			return apisix.New(log, statusUpdater, readinessManager, opts...)
+		})
 }
diff --git a/internal/provider/options.go b/internal/provider/options.go
index 540f2e6..379e8a0 100644
--- a/internal/provider/options.go
+++ b/internal/provider/options.go
@@ -17,7 +17,9 @@
 
 package provider
 
-import "time"
+import (
+	"time"
+)
 
 type Option interface {
 	ApplyToList(*Options)
diff --git a/internal/provider/register.go b/internal/provider/register.go
index 25cc670..fddb1af 100644
--- a/internal/provider/register.go
+++ b/internal/provider/register.go
@@ -23,13 +23,14 @@
 
 	"github.com/apache/apisix-ingress-controller/internal/controller/status"
 	"github.com/apache/apisix-ingress-controller/internal/manager/readiness"
+	"github.com/go-logr/logr"
 )
 
 type RegisterHandler interface {
 	Register(pathPrefix string, mux *http.ServeMux)
 }
 
-type RegisterFunc func(status.Updater, readiness.ReadinessManager, ...Option) (Provider, error)
+type RegisterFunc func(logr.Logger, status.Updater, readiness.ReadinessManager, ...Option) (Provider, error)
 
 var providers = map[string]RegisterFunc{}
 
@@ -45,10 +46,16 @@
 	return f, nil
 }
 
-func New(providerType string, updater status.Updater, readinesser readiness.ReadinessManager, opts ...Option) (Provider, error) {
+func New(
+	providerType string,
+	log logr.Logger,
+	updater status.Updater,
+	readinesser readiness.ReadinessManager,
+	opts ...Option,
+) (Provider, error) {
 	f, err := Get(providerType)
 	if err != nil {
 		return nil, fmt.Errorf("failed to get provider %q: %w", providerType, err)
 	}
-	return f(updater, readinesser, opts...)
+	return f(log, updater, readinesser, opts...)
 }