diff --git a/embed/etcd.go b/embed/etcd.go index e5da45ad80f..d36d732a62c 100644 --- a/embed/etcd.go +++ b/embed/etcd.go @@ -179,6 +179,7 @@ func StartEtcd(inCfg *Config) (e *Etcd, err error) { AuthToken: cfg.AuthToken, InitialCorruptCheck: cfg.ExperimentalInitialCorruptCheck, CorruptCheckTime: cfg.ExperimentalCorruptCheckTime, + Debug: cfg.Debug, } if e.Server, err = etcdserver.NewServer(srvcfg); err != nil { diff --git a/etcdserver/api/v3rpc/grpc.go b/etcdserver/api/v3rpc/grpc.go index 3fd8e864a0f..5adb3e6efa8 100644 --- a/etcdserver/api/v3rpc/grpc.go +++ b/etcdserver/api/v3rpc/grpc.go @@ -16,6 +16,7 @@ package v3rpc import ( "crypto/tls" + "io/ioutil" "math" "os" @@ -36,10 +37,6 @@ const ( maxSendBytes = math.MaxInt32 ) -func init() { - grpclog.SetLoggerV2(grpclog.NewLoggerV2(os.Stderr, os.Stderr, os.Stderr)) -} - func Server(s *etcdserver.EtcdServer, tls *tls.Config, gopts ...grpc.ServerOption) *grpc.Server { var opts []grpc.ServerOption opts = append(opts, grpc.CustomCodec(&codec{})) @@ -70,5 +67,13 @@ func Server(s *etcdserver.EtcdServer, tls *tls.Config, gopts ...grpc.ServerOptio // set zero values for metrics registered for this grpc server grpc_prometheus.Register(grpcServer) + if s.Cfg.Debug { + grpc.EnableTracing = true + // enable info, warning, error + grpclog.SetLoggerV2(grpclog.NewLoggerV2(os.Stderr, os.Stderr, os.Stderr)) + } else { + // only discard info + grpclog.SetLoggerV2(grpclog.NewLoggerV2(ioutil.Discard, os.Stderr, os.Stderr)) + } return grpcServer } diff --git a/etcdserver/config.go b/etcdserver/config.go index 80d8219436e..249e8d5fc13 100644 --- a/etcdserver/config.go +++ b/etcdserver/config.go @@ -70,6 +70,8 @@ type ServerConfig struct { // before serving any peer/client traffic. InitialCorruptCheck bool CorruptCheckTime time.Duration + + Debug bool } // VerifyBootstrap sanity-checks the initial config for bootstrap case