embed,etcdmain: rename to "--log-outputs" flag

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
This commit is contained in:
Gyuho Lee 2018-04-25 11:38:11 -07:00
parent 1539fddb27
commit af5bc439b3
3 changed files with 61 additions and 15 deletions

View File

@ -16,6 +16,7 @@ package embed
import ( import (
"crypto/tls" "crypto/tls"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net" "net"
@ -23,6 +24,7 @@ import (
"net/url" "net/url"
"os" "os"
"path/filepath" "path/filepath"
"reflect"
"sort" "sort"
"strings" "strings"
"sync" "sync"
@ -265,13 +267,17 @@ type Config struct {
// WARN: "capnslog" is being deprecated in v3.5. // WARN: "capnslog" is being deprecated in v3.5.
Logger string `json:"logger"` Logger string `json:"logger"`
// DeprecatedLogOutput is to be deprecated in v3.5.
// Just here for safe migration in v3.4.
DeprecatedLogOutput []string `json:"log-output"`
// LogOutputs is either: // LogOutputs is either:
// - "default" as os.Stderr, // - "default" as os.Stderr,
// - "stderr" as os.Stderr, // - "stderr" as os.Stderr,
// - "stdout" as os.Stdout, // - "stdout" as os.Stdout,
// - file path to append server logs to. // - file path to append server logs to.
// It can be multiple when "Logger" is zap. // It can be multiple when "Logger" is zap.
LogOutputs []string `json:"log-output"` LogOutputs []string `json:"log-outputs"`
// Debug is true, to enable debug level logging. // Debug is true, to enable debug level logging.
Debug bool `json:"debug"` Debug bool `json:"debug"`
@ -368,12 +374,13 @@ func NewConfig() *Config {
PreVote: false, // TODO: enable by default in v3.5 PreVote: false, // TODO: enable by default in v3.5
loggerMu: new(sync.RWMutex), loggerMu: new(sync.RWMutex),
logger: nil, logger: nil,
Logger: "capnslog", Logger: "capnslog",
LogOutputs: []string{DefaultLogOutput}, DeprecatedLogOutput: []string{DefaultLogOutput},
Debug: false, LogOutputs: []string{DefaultLogOutput},
LogPkgLevels: "", Debug: false,
LogPkgLevels: "",
} }
cfg.InitialCluster = cfg.InitialClusterFromName(cfg.Name) cfg.InitialCluster = cfg.InitialClusterFromName(cfg.Name)
return cfg return cfg
@ -406,6 +413,34 @@ var grpcLogOnce = new(sync.Once)
// setupLogging initializes etcd logging. // setupLogging initializes etcd logging.
// Must be called after flag parsing or finishing configuring embed.Config. // Must be called after flag parsing or finishing configuring embed.Config.
func (cfg *Config) setupLogging() error { func (cfg *Config) setupLogging() error {
// handle "DeprecatedLogOutput" in v3.4
// TODO: remove "DeprecatedLogOutput" in v3.5
len1 := len(cfg.DeprecatedLogOutput)
len2 := len(cfg.LogOutputs)
if len1 != len2 {
switch {
case len1 > len2: // deprecate "log-output" flag is used
fmt.Fprintln(os.Stderr, "'--log-output' flag has been deprecated! Please use '--log-outputs'!")
cfg.LogOutputs = cfg.DeprecatedLogOutput
case len1 < len2: // "--log-outputs" flag has been set with multiple writers
cfg.DeprecatedLogOutput = []string{}
}
} else {
if len1 > 1 {
return errors.New("both '--log-output' and '--log-outputs' are set; only set '--log-outputs'")
}
if len1 < 1 {
return errors.New("either '--log-output' or '--log-outputs' flag must be set")
}
if reflect.DeepEqual(cfg.DeprecatedLogOutput, cfg.LogOutputs) && cfg.DeprecatedLogOutput[0] != DefaultLogOutput {
return fmt.Errorf("'--log-output=%q' and '--log-outputs=%q' are incompatible; only set --log-outputs", cfg.DeprecatedLogOutput, cfg.LogOutputs)
}
if !reflect.DeepEqual(cfg.DeprecatedLogOutput, []string{DefaultLogOutput}) {
fmt.Fprintf(os.Stderr, "Deprecated '--log-output' flag is set to %q\n", cfg.DeprecatedLogOutput)
fmt.Fprintln(os.Stderr, "Please use '--log-outputs' flag")
}
}
switch cfg.Logger { switch cfg.Logger {
case "capnslog": // TODO: deprecate this in v3.5 case "capnslog": // TODO: deprecate this in v3.5
cfg.ClientTLSInfo.HandshakeFailure = logTLSHandshakeFailure cfg.ClientTLSInfo.HandshakeFailure = logTLSHandshakeFailure

View File

@ -218,7 +218,8 @@ func newConfig() *config {
// logging // logging
fs.StringVar(&cfg.ec.Logger, "logger", "capnslog", "Specify 'zap' for structured logging or 'capnslog'.") fs.StringVar(&cfg.ec.Logger, "logger", "capnslog", "Specify 'zap' for structured logging or 'capnslog'.")
fs.Var(flags.NewUniqueStringsValue(embed.DefaultLogOutput), "log-output", "Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd, or list of comma separated output targets.") fs.Var(flags.NewUniqueStringsValue(embed.DefaultLogOutput), "log-output", "DEPRECATED: use '--log-outputs'.")
fs.Var(flags.NewUniqueStringsValue(embed.DefaultLogOutput), "log-outputs", "Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd, or list of comma separated output targets.")
fs.BoolVar(&cfg.ec.Debug, "debug", false, "Enable debug-level logging for etcd.") fs.BoolVar(&cfg.ec.Debug, "debug", false, "Enable debug-level logging for etcd.")
fs.StringVar(&cfg.ec.LogPkgLevels, "log-package-levels", "", "(To be deprecated) Specify a particular log level for each etcd package (eg: 'etcdmain=CRITICAL,etcdserver=DEBUG').") fs.StringVar(&cfg.ec.LogPkgLevels, "log-package-levels", "", "(To be deprecated) Specify a particular log level for each etcd package (eg: 'etcdmain=CRITICAL,etcdserver=DEBUG').")
@ -306,13 +307,23 @@ func (cfg *config) configFromCmdLine() error {
cfg.ec.CORS = flags.UniqueURLsMapFromFlag(cfg.cf.flagSet, "cors") cfg.ec.CORS = flags.UniqueURLsMapFromFlag(cfg.cf.flagSet, "cors")
cfg.ec.HostWhitelist = flags.UniqueStringsMapFromFlag(cfg.cf.flagSet, "host-whitelist") cfg.ec.HostWhitelist = flags.UniqueStringsMapFromFlag(cfg.cf.flagSet, "host-whitelist")
outputs := flags.UniqueStringsMapFromFlag(cfg.cf.flagSet, "log-output")
oss := make([]string, 0, len(outputs)) // TODO: remove this in v3.5
for v := range outputs { output := flags.UniqueStringsMapFromFlag(cfg.cf.flagSet, "log-output")
oss = append(oss, v) oss1 := make([]string, 0, len(output))
for v := range output {
oss1 = append(oss1, v)
} }
sort.Strings(oss) sort.Strings(oss1)
cfg.ec.LogOutputs = oss cfg.ec.DeprecatedLogOutput = oss1
outputs := flags.UniqueStringsMapFromFlag(cfg.cf.flagSet, "log-outputs")
oss2 := make([]string, 0, len(outputs))
for v := range outputs {
oss2 = append(oss2, v)
}
sort.Strings(oss2)
cfg.ec.LogOutputs = oss2
cfg.ec.ClusterState = cfg.cf.clusterState.String() cfg.ec.ClusterState = cfg.cf.clusterState.String()
cfg.cp.Fallback = cfg.cf.fallback.String() cfg.cp.Fallback = cfg.cf.fallback.String()

View File

@ -160,7 +160,7 @@ Profiling:
Logging: Logging:
--logger 'capnslog' --logger 'capnslog'
Specify 'zap' for structured logging or 'capnslog'. Specify 'zap' for structured logging or 'capnslog'.
--log-output 'default' --log-outputs 'default'
Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd, or list of comma separated output targets. Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd, or list of comma separated output targets.
--debug 'false' --debug 'false'
Enable debug-level logging for etcd. Enable debug-level logging for etcd.