diff --git a/etcdserver/config.go b/etcdserver/config.go index 4ea8e128b767..130a6ac505ae 100644 --- a/etcdserver/config.go +++ b/etcdserver/config.go @@ -27,6 +27,7 @@ import ( "github.com/coreos/etcd/pkg/types" "go.uber.org/zap" + "go.uber.org/zap/zapcore" ) // ServerConfig holds the configuration of etcd as taken from the command line or discovery. @@ -115,8 +116,16 @@ type ServerConfig struct { // Logger logs server-side operations. // If not nil, it disables "capnslog" and uses the given logger. Logger *zap.Logger + // LoggerConfig is server logger configuration for Raft logger. - LoggerConfig zap.Config + // Must be either one of "LoggerConfig" or "LoggerCore" non-nil. + // Both cannot be non-nil at the same time (to handle journald logging). + LoggerConfig *zap.Config + // LoggerCore is "zapcore.Core" for raft logger. + // Must be either one of "LoggerConfig" or "LoggerCore" non-nil. + // Both cannot be non-nil at the same time (to handle journald logging). + LoggerCore zapcore.Core + LoggerWriteSyncer zapcore.WriteSyncer Debug bool diff --git a/etcdserver/raft.go b/etcdserver/raft.go index ec319ad18a62..4b3ad2808e35 100644 --- a/etcdserver/raft.go +++ b/etcdserver/raft.go @@ -468,9 +468,13 @@ func startNode(cfg ServerConfig, cl *membership.RaftCluster, ids []types.ID) (id } if cfg.Logger != nil { // called after capnslog setting in "init" function - c.Logger, err = logutil.NewRaftLogger(cfg.LoggerConfig) - if err != nil { - log.Fatalf("cannot create raft logger %v", err) + if cfg.LoggerConfig != nil { + c.Logger, err = logutil.NewRaftLogger(cfg.LoggerConfig) + if err != nil { + log.Fatalf("cannot create raft logger %v", err) + } + } else if cfg.LoggerCore != nil && cfg.LoggerWriteSyncer != nil { + c.Logger = logutil.NewRaftLoggerFromZapCore(cfg.LoggerCore, cfg.LoggerWriteSyncer) } } @@ -519,9 +523,13 @@ func restartNode(cfg ServerConfig, snapshot *raftpb.Snapshot) (types.ID, *member if cfg.Logger != nil { // called after capnslog setting in "init" function var err error - c.Logger, err = logutil.NewRaftLogger(cfg.LoggerConfig) - if err != nil { - log.Fatalf("cannot create raft logger %v", err) + if cfg.LoggerConfig != nil { + c.Logger, err = logutil.NewRaftLogger(cfg.LoggerConfig) + if err != nil { + log.Fatalf("cannot create raft logger %v", err) + } + } else if cfg.LoggerCore != nil && cfg.LoggerWriteSyncer != nil { + c.Logger = logutil.NewRaftLoggerFromZapCore(cfg.LoggerCore, cfg.LoggerWriteSyncer) } } @@ -611,9 +619,13 @@ func restartAsStandaloneNode(cfg ServerConfig, snapshot *raftpb.Snapshot) (types } if cfg.Logger != nil { // called after capnslog setting in "init" function - c.Logger, err = logutil.NewRaftLogger(cfg.LoggerConfig) - if err != nil { - log.Fatalf("cannot create raft logger %v", err) + if cfg.LoggerConfig != nil { + c.Logger, err = logutil.NewRaftLogger(cfg.LoggerConfig) + if err != nil { + log.Fatalf("cannot create raft logger %v", err) + } + } else if cfg.LoggerCore != nil && cfg.LoggerWriteSyncer != nil { + c.Logger = logutil.NewRaftLoggerFromZapCore(cfg.LoggerCore, cfg.LoggerWriteSyncer) } }