You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2024/09/02 03:36:11 UTC

(skywalking-banyandb) 01/01: Change etcd default log level

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

hanahmily pushed a commit to branch etcd
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git

commit fcbe5c842cbe2629b3f40dfd3ee923f3518253ef
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Mon Sep 2 03:32:46 2024 +0000

    Change etcd default log level
    
    Signed-off-by: Gao Hongtao <ha...@gmail.com>
---
 CHANGES.md                              | 13 +++++++------
 banyand/metadata/embeddedetcd/server.go |  3 ++-
 banyand/metadata/schema/etcd.go         |  5 +++--
 docs/operation/observability.md         |  2 +-
 pkg/logger/logger.go                    | 21 +++++++++++++++++----
 5 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index 789d1aef..dd11093b 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -54,12 +54,13 @@ Release Notes.
 
 ### Chores
 
-Bump up the version of infra e2e framework.
-Separate the monolithic release package into two packages: banyand and bydbctl.
-Separate the monolithic Docker image into two images: banyand and bydbctl.
-Update CI to publish linux/amd64 and linux/arm64 Docker images.
-Make the build system compiles the binary based on the platform which is running on.
-Push "skywalking-banyandb-test" image for e2e and stress test. This image contains bydbctl to do a health check.
+- Bump up the version of infra e2e framework.
+- Separate the monolithic release package into two packages: banyand and bydbctl.
+- Separate the monolithic Docker image into two images: banyand and bydbctl.
+- Update CI to publish linux/amd64 and linux/arm64 Docker images.
+- Make the build system compiles the binary based on the platform which is running on.
+- Push "skywalking-banyandb-test" image for e2e and stress test. This image contains bydbctl to do a health check.
+- Set etcd-client log level to "error" and etcd-server log level to "warn".
 
 ## 0.6.1
 
diff --git a/banyand/metadata/embeddedetcd/server.go b/banyand/metadata/embeddedetcd/server.go
index c6833ef2..0271df40 100644
--- a/banyand/metadata/embeddedetcd/server.go
+++ b/banyand/metadata/embeddedetcd/server.go
@@ -25,6 +25,7 @@ import (
 	"path/filepath"
 	"time"
 
+	"github.com/rs/zerolog"
 	"go.etcd.io/etcd/server/v3/embed"
 	"go.uber.org/zap"
 
@@ -99,7 +100,7 @@ func NewServer(options ...Option) (Server, error) {
 	for _, opt := range options {
 		opt(conf)
 	}
-	zapCfg := logger.GetLogger("etcd").ToZapConfig()
+	zapCfg := logger.GetLogger("etcd-server").DefaultLevel(zerolog.WarnLevel).ToZapConfig()
 
 	var l *zap.Logger
 	var err error
diff --git a/banyand/metadata/schema/etcd.go b/banyand/metadata/schema/etcd.go
index 38b5615a..00392f3d 100644
--- a/banyand/metadata/schema/etcd.go
+++ b/banyand/metadata/schema/etcd.go
@@ -26,6 +26,7 @@ import (
 	"time"
 
 	"github.com/pkg/errors"
+	"github.com/rs/zerolog"
 	pb "go.etcd.io/etcd/api/v3/etcdserverpb"
 	"go.etcd.io/etcd/client/pkg/v3/transport"
 	clientv3 "go.etcd.io/etcd/client/v3"
@@ -177,7 +178,7 @@ func NewEtcdSchemaRegistry(options ...RegistryOption) (Registry, error) {
 	if registryConfig.serverEndpoints == nil {
 		return nil, errors.New("server address is not set")
 	}
-	log := logger.GetLogger("etcd")
+	log := logger.GetLogger("etcd-client").DefaultLevel(zerolog.ErrorLevel)
 	zapCfg := log.ToZapConfig()
 
 	var l *zap.Logger
@@ -205,7 +206,7 @@ func NewEtcdSchemaRegistry(options ...RegistryOption) (Registry, error) {
 		namespace: registryConfig.namespace,
 		client:    client,
 		closer:    run.NewCloser(1),
-		l:         log,
+		l:         logger.GetLogger("schema-registry"),
 	}
 	return reg, nil
 }
diff --git a/docs/operation/observability.md b/docs/operation/observability.md
index 7b4e6141..d28b5f41 100644
--- a/docs/operation/observability.md
+++ b/docs/operation/observability.md
@@ -8,7 +8,7 @@ BanyanDB uses the [zerolo](https://github.com/rs/zerolog) library for logging. T
 
 `logging-env` is used to set the logging environment. The default value is `prod`. The logging environment can be set to `dev` for development or `prod` for production. The logging environment affects the log format and output. In the `dev` environment, logs are output in a human-readable format, while in the `prod` environment, logs are output in JSON format.
 
-`logging-modules` and `logging-levels` are used to set the log level for specific modules. The `logging-modules` flag is a comma-separated list of module names, and the `logging-levels` flag is a comma-separated list of log levels corresponding to the module names. The log level for a specific module can be set using these flags. Available modules are `storage`, `distributed-query`, `liaison-grpc`, `liaison-http`, `measure`, `stream`, `metadata`, `etcd`, `metrics`, `pprof-service`, `quer [...]
+`logging-modules` and `logging-levels` are used to set the log level for specific modules. The `logging-modules` flag is a comma-separated list of module names, and the `logging-levels` flag is a comma-separated list of log levels corresponding to the module names. The log level for a specific module can be set using these flags. Available modules are `storage`, `distributed-query`, `liaison-grpc`, `liaison-http`, `measure`, `stream`, `metadata`, `etcd-client`, `etcd-server`, `schema-reg [...]
 
 ```sh
 --logging-modules=storage --logging-levels=debug
diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go
index b967083a..aa17d57b 100644
--- a/pkg/logger/logger.go
+++ b/pkg/logger/logger.go
@@ -46,9 +46,10 @@ type Logging struct {
 // Logger is wrapper for rs/zerolog logger with module, it is singleton.
 type Logger struct {
 	*zerolog.Logger
-	modules     map[string]zerolog.Level
-	module      string
-	development bool
+	modules        map[string]zerolog.Level
+	module         string
+	development    bool
+	isDefaultLevel bool
 }
 
 // Module returns logger's module name.
@@ -67,6 +68,7 @@ func (l *Logger) Named(name ...string) *Logger {
 	var moduleBuilder strings.Builder
 	var module string
 	level := l.GetLevel()
+	isDefaultLevel := true
 	for i, m := range mm {
 		if i != 0 {
 			moduleBuilder.WriteString(".")
@@ -75,10 +77,12 @@ func (l *Logger) Named(name ...string) *Logger {
 		module = moduleBuilder.String()
 		if ml, ok := l.modules[module]; ok {
 			level = ml
+			isDefaultLevel = false
+			break
 		}
 	}
 	subLogger := root.get().With().Str("module", moduleBuilder.String()).Logger().Level(level)
-	return &Logger{module: module, modules: l.modules, development: l.development, Logger: &subLogger}
+	return &Logger{module: module, modules: l.modules, development: l.development, Logger: &subLogger, isDefaultLevel: isDefaultLevel}
 }
 
 // Sampled return a Logger with a sampler that will send every Nth events.
@@ -138,6 +142,15 @@ func (l *Logger) ToZapConfig() zap.Config {
 	}
 }
 
+// DefaultLevel sets the default level for the logger.
+func (l *Logger) DefaultLevel(level zerolog.Level) *Logger {
+	if l.isDefaultLevel {
+		nl := l.Logger.Level(level)
+		l.Logger = &nl
+	}
+	return l
+}
+
 // Loggable indicates the implement supports logging.
 type Loggable interface {
 	SetLogger(*Logger)