// Copyright 2016 The etcd Authors // // Licensed 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. package clientv3 import ( "log" "os" "go.etcd.io/etcd/pkg/v3/logutil" "go.uber.org/zap" "go.uber.org/zap/zapcore" "google.golang.org/grpc/grpclog" ) func init() { // We override grpc logger only when the environment variable is set // in order to not interfere by default with user's code or other libraries. if os.Getenv("ETCD_CLIENT_DEBUG") != "" { // We don't use grpc_zap.ReplaceGrpcLoggerV2(lg) to not push (wide) set // of grpc-ecosystem/go-grpc-middleware dependencies on etcd-client users. lg, err := logutil.NewGRPCLoggerV2(createDefaultZapLoggerConfig()) if err != nil { panic(err) } grpclog.SetLoggerV2(lg) } } // SetLogger sets grpc logger. // // Deprecated: use grpclog.SetLoggerV2 directly or grpc_zap.ReplaceGrpcLoggerV2. func SetLogger(l grpclog.LoggerV2) { grpclog.SetLoggerV2(l) } // etcdClientDebugLevel translates ETCD_CLIENT_DEBUG into zap log level. func etcdClientDebugLevel() zapcore.Level { envLevel := os.Getenv("ETCD_CLIENT_DEBUG") if envLevel == "" || envLevel == "true" { return zapcore.InfoLevel } var l zapcore.Level if err := l.Set(envLevel); err == nil { log.Printf("Deprecated env ETCD_CLIENT_DEBUG value. Using default level: 'info'") return zapcore.InfoLevel } return l } func createDefaultZapLoggerConfig() zap.Config { lcfg := logutil.DefaultZapLoggerConfig lcfg.Level = zap.NewAtomicLevelAt(etcdClientDebugLevel()) return lcfg } func createDefaultZapLogger() (*zap.Logger, error) { c, err := createDefaultZapLoggerConfig().Build() if err != nil { return nil, err } return c.Named("etcd-client"), nil }