client: Allow setting zap logger in config
This commit is contained in:
parent
7ae55cf981
commit
06afe87b34
@ -99,6 +99,9 @@ func NewFromURLs(urls []string) (*Client, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WithLogger overrides the logger.
|
// WithLogger overrides the logger.
|
||||||
|
//
|
||||||
|
// Deprecated: Please use Logger field in clientv3.Config
|
||||||
|
//
|
||||||
// Does not changes grpcLogger, that can be explicitly configured
|
// Does not changes grpcLogger, that can be explicitly configured
|
||||||
// using grpc_zap.ReplaceGrpcLoggerV2(..) method.
|
// using grpc_zap.ReplaceGrpcLoggerV2(..) method.
|
||||||
func (c *Client) WithLogger(lg *zap.Logger) *Client {
|
func (c *Client) WithLogger(lg *zap.Logger) *Client {
|
||||||
@ -331,7 +334,9 @@ func newClient(cfg *Config) (*Client, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
if cfg.LogConfig != nil {
|
if cfg.Logger != nil {
|
||||||
|
client.lg = cfg.Logger
|
||||||
|
} else if cfg.LogConfig != nil {
|
||||||
client.lg, err = cfg.LogConfig.Build()
|
client.lg, err = cfg.LogConfig.Build()
|
||||||
} else {
|
} else {
|
||||||
client.lg, err = createDefaultZapLogger()
|
client.lg, err = createDefaultZapLogger()
|
||||||
|
@ -29,11 +29,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func NewClient(t *testing.T, cfg Config) (*Client, error) {
|
func NewClient(t *testing.T, cfg Config) (*Client, error) {
|
||||||
client, err := New(cfg)
|
cfg.Logger = zaptest.NewLogger(t)
|
||||||
if err != nil {
|
return New(cfg)
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return client.WithLogger(zaptest.NewLogger(t)), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDialCancel(t *testing.T) {
|
func TestDialCancel(t *testing.T) {
|
||||||
|
@ -76,6 +76,10 @@ type Config struct {
|
|||||||
// other operations that do not have an explicit context.
|
// other operations that do not have an explicit context.
|
||||||
Context context.Context
|
Context context.Context
|
||||||
|
|
||||||
|
// Logger sets client-side logger.
|
||||||
|
// If nil, fallback to building LogConfig.
|
||||||
|
Logger *zap.Logger
|
||||||
|
|
||||||
// LogConfig configures client-side logger.
|
// LogConfig configures client-side logger.
|
||||||
// If nil, use the default logger.
|
// If nil, use the default logger.
|
||||||
// TODO: configure gRPC logger
|
// TODO: configure gRPC logger
|
||||||
|
@ -47,6 +47,7 @@ func Save(ctx context.Context, lg *zap.Logger, cfg clientv3.Config, dbPath strin
|
|||||||
if lg == nil {
|
if lg == nil {
|
||||||
lg = zap.NewExample()
|
lg = zap.NewExample()
|
||||||
}
|
}
|
||||||
|
cfg.Logger = lg.Named("client")
|
||||||
if len(cfg.Endpoints) != 1 {
|
if len(cfg.Endpoints) != 1 {
|
||||||
return fmt.Errorf("snapshot must be requested to one selected node, not multiple %v", cfg.Endpoints)
|
return fmt.Errorf("snapshot must be requested to one selected node, not multiple %v", cfg.Endpoints)
|
||||||
}
|
}
|
||||||
@ -56,8 +57,6 @@ func Save(ctx context.Context, lg *zap.Logger, cfg clientv3.Config, dbPath strin
|
|||||||
}
|
}
|
||||||
defer cli.Close()
|
defer cli.Close()
|
||||||
|
|
||||||
cli = cli.WithLogger(lg.Named("client"))
|
|
||||||
|
|
||||||
partpath := dbPath + ".part"
|
partpath := dbPath + ".part"
|
||||||
defer os.RemoveAll(partpath)
|
defer os.RemoveAll(partpath)
|
||||||
|
|
||||||
|
@ -115,12 +115,12 @@ func epHealthCommandFunc(cmd *cobra.Command, args []string) {
|
|||||||
go func(cfg *v3.Config) {
|
go func(cfg *v3.Config) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
ep := cfg.Endpoints[0]
|
ep := cfg.Endpoints[0]
|
||||||
|
cfg.Logger = lg.Named("client")
|
||||||
cli, err := v3.New(*cfg)
|
cli, err := v3.New(*cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
hch <- epHealth{Ep: ep, Health: false, Error: err.Error()}
|
hch <- epHealth{Ep: ep, Health: false, Error: err.Error()}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cli = cli.WithLogger(lg.Named("client"))
|
|
||||||
st := time.Now()
|
st := time.Now()
|
||||||
// get a random key. As long as we can get the response without an error, the
|
// get a random key. As long as we can get the response without an error, the
|
||||||
// endpoint is health.
|
// endpoint is health.
|
||||||
|
@ -283,17 +283,18 @@ func mustNewClient(lg *zap.Logger) *clientv3.Client {
|
|||||||
grpc.WithUnaryInterceptor(grpcproxy.AuthUnaryClientInterceptor))
|
grpc.WithUnaryInterceptor(grpcproxy.AuthUnaryClientInterceptor))
|
||||||
cfg.DialOptions = append(cfg.DialOptions,
|
cfg.DialOptions = append(cfg.DialOptions,
|
||||||
grpc.WithStreamInterceptor(grpcproxy.AuthStreamClientInterceptor))
|
grpc.WithStreamInterceptor(grpcproxy.AuthStreamClientInterceptor))
|
||||||
|
cfg.Logger = lg.Named("client")
|
||||||
client, err := clientv3.New(*cfg)
|
client, err := clientv3.New(*cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintln(os.Stderr, err)
|
fmt.Fprintln(os.Stderr, err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
return client.WithLogger(lg.Named("client"))
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
func mustNewProxyClient(lg *zap.Logger, tls *transport.TLSInfo) *clientv3.Client {
|
func mustNewProxyClient(lg *zap.Logger, tls *transport.TLSInfo) *clientv3.Client {
|
||||||
eps := []string{grpcProxyAdvertiseClientURL}
|
eps := []string{grpcProxyAdvertiseClientURL}
|
||||||
cfg, err := newProxyClientCfg(lg, eps, tls)
|
cfg, err := newProxyClientCfg(lg.Named("client"), eps, tls)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintln(os.Stderr, err)
|
fmt.Fprintln(os.Stderr, err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@ -304,13 +305,14 @@ func mustNewProxyClient(lg *zap.Logger, tls *transport.TLSInfo) *clientv3.Client
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
lg.Info("create proxy client", zap.String("grpcProxyAdvertiseClientURL", grpcProxyAdvertiseClientURL))
|
lg.Info("create proxy client", zap.String("grpcProxyAdvertiseClientURL", grpcProxyAdvertiseClientURL))
|
||||||
return client.WithLogger(lg.Named("client"))
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
func newProxyClientCfg(lg *zap.Logger, eps []string, tls *transport.TLSInfo) (*clientv3.Config, error) {
|
func newProxyClientCfg(lg *zap.Logger, eps []string, tls *transport.TLSInfo) (*clientv3.Config, error) {
|
||||||
cfg := clientv3.Config{
|
cfg := clientv3.Config{
|
||||||
Endpoints: eps,
|
Endpoints: eps,
|
||||||
DialTimeout: 5 * time.Second,
|
DialTimeout: 5 * time.Second,
|
||||||
|
Logger: lg,
|
||||||
}
|
}
|
||||||
if tls != nil {
|
if tls != nil {
|
||||||
clientTLS, err := tls.ClientConfig()
|
clientTLS, err := tls.ClientConfig()
|
||||||
|
@ -119,13 +119,13 @@ func testBalancerUnderNetworkPartition(t *testing.T, op func(*clientv3.Client, c
|
|||||||
Endpoints: []string{eps[0]},
|
Endpoints: []string{eps[0]},
|
||||||
DialTimeout: 3 * time.Second,
|
DialTimeout: 3 * time.Second,
|
||||||
DialOptions: []grpc.DialOption{grpc.WithBlock()},
|
DialOptions: []grpc.DialOption{grpc.WithBlock()},
|
||||||
|
Logger: zaptest.NewLogger(t).Named("client"),
|
||||||
}
|
}
|
||||||
cli, err := integration.NewClient(t, ccfg)
|
cli, err := integration.NewClient(t, ccfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer cli.Close()
|
defer cli.Close()
|
||||||
cli = cli.WithLogger(zaptest.NewLogger(t).Named("client"))
|
|
||||||
// wait for eps[0] to be pinned
|
// wait for eps[0] to be pinned
|
||||||
clientv3test.MustWaitPinReady(t, cli)
|
clientv3test.MustWaitPinReady(t, cli)
|
||||||
|
|
||||||
|
@ -41,9 +41,6 @@ func toGRPC(c *clientv3.Client) grpcAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newClientV3(cfg clientv3.Config, lg *zap.Logger) (*clientv3.Client, error) {
|
func newClientV3(cfg clientv3.Config, lg *zap.Logger) (*clientv3.Client, error) {
|
||||||
c, err := clientv3.New(cfg)
|
cfg.Logger = lg
|
||||||
if err != nil {
|
return clientv3.New(cfg)
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return c.WithLogger(lg), nil
|
|
||||||
}
|
}
|
||||||
|
@ -109,11 +109,11 @@ func (pc *proxyCloser) Close() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newClientV3(cfg clientv3.Config, lg *zap.Logger) (*clientv3.Client, error) {
|
func newClientV3(cfg clientv3.Config, lg *zap.Logger) (*clientv3.Client, error) {
|
||||||
|
cfg.Logger = lg
|
||||||
c, err := clientv3.New(cfg)
|
c, err := clientv3.New(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
c = c.WithLogger(lg)
|
|
||||||
rpc := toGRPC(c)
|
rpc := toGRPC(c)
|
||||||
c.KV = clientv3.NewKVFromKVClient(rpc.KV, c)
|
c.KV = clientv3.NewKVFromKVClient(rpc.KV, c)
|
||||||
pmu.Lock()
|
pmu.Lock()
|
||||||
|
@ -35,7 +35,6 @@ import (
|
|||||||
"go.etcd.io/etcd/client/v3"
|
"go.etcd.io/etcd/client/v3"
|
||||||
"go.etcd.io/etcd/server/v3/embed"
|
"go.etcd.io/etcd/server/v3/embed"
|
||||||
"go.etcd.io/etcd/tests/v3/integration"
|
"go.etcd.io/etcd/tests/v3/integration"
|
||||||
"go.uber.org/zap/zaptest"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -167,8 +166,6 @@ func testEmbedEtcdGracefulStop(t *testing.T, secure bool) {
|
|||||||
}
|
}
|
||||||
defer cli.Close()
|
defer cli.Close()
|
||||||
|
|
||||||
cli = cli.WithLogger(zaptest.NewLogger(t))
|
|
||||||
|
|
||||||
// open watch connection
|
// open watch connection
|
||||||
cli.Watch(context.Background(), "foo")
|
cli.Watch(context.Background(), "foo")
|
||||||
|
|
||||||
|
@ -73,9 +73,8 @@ func NewEmbedConfig(t testing.TB, name string) *embed.Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewClient(t testing.TB, cfg clientv3.Config) (*clientv3.Client, error) {
|
func NewClient(t testing.TB, cfg clientv3.Config) (*clientv3.Client, error) {
|
||||||
client, err := clientv3.New(cfg)
|
if cfg.Logger != nil {
|
||||||
if err != nil {
|
cfg.Logger = zaptest.NewLogger(t)
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
return client.WithLogger(zaptest.NewLogger(t)), nil
|
return clientv3.New(cfg)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user