Do not override syslog target, fixes #2550 (#2551)

Whenever teleport was started with -d flag,
output target was always overwritten to stderr.

This commit makes sure that target supplied
in the configuration is not overwritten
even in case when -d flag is set.
This commit is contained in:
Alexander Klizhentas 2019-02-09 17:43:59 -08:00
parent f4635de5c2
commit 6bae91466f
3 changed files with 24 additions and 11 deletions

View file

@ -307,6 +307,9 @@ const (
// HumanDateFormatMilli is a human readable date formatting with milliseconds // HumanDateFormatMilli is a human readable date formatting with milliseconds
HumanDateFormatMilli = "Jan _2 15:04:05.000 UTC" HumanDateFormatMilli = "Jan _2 15:04:05.000 UTC"
// DebugLevel is a debug logging level name
DebugLevel = "debug"
) )
// Component generates "component:subcomponent1:subcomponent2" strings used // Component generates "component:subcomponent1:subcomponent2" strings used

View file

@ -204,7 +204,11 @@ func ApplyFileConfig(fc *FileConfig, cfg *service.Config) error {
case "stdout", "out", "1": case "stdout", "out", "1":
log.SetOutput(os.Stdout) log.SetOutput(os.Stdout)
case teleport.Syslog: case teleport.Syslog:
utils.SwitchLoggingtoSyslog() err := utils.SwitchLoggingtoSyslog()
if err != nil {
// this error will go to stderr
log.Errorf("Failed to switch logging to syslog: %v.", err)
}
default: default:
// assume it's a file path: // assume it's a file path:
logFile, err := os.Create(fc.Logger.Output) logFile, err := os.Create(fc.Logger.Output)
@ -220,14 +224,13 @@ func ApplyFileConfig(fc *FileConfig, cfg *service.Config) error {
log.SetLevel(log.InfoLevel) log.SetLevel(log.InfoLevel)
case "err", "error": case "err", "error":
log.SetLevel(log.ErrorLevel) log.SetLevel(log.ErrorLevel)
case "debug": case teleport.DebugLevel:
log.SetLevel(log.DebugLevel) log.SetLevel(log.DebugLevel)
case "warn", "warning": case "warn", "warning":
log.SetLevel(log.WarnLevel) log.SetLevel(log.WarnLevel)
default: default:
return trace.BadParameter("unsupported logger severity: '%v'", fc.Logger.Severity) return trace.BadParameter("unsupported logger severity: '%v'", fc.Logger.Severity)
} }
// apply cache policy for node and proxy // apply cache policy for node and proxy
cachePolicy, err := fc.CachePolicy.Parse() cachePolicy, err := fc.CachePolicy.Parse()
if err != nil { if err != nil {
@ -808,6 +811,12 @@ func Configure(clf *CommandLineFlags, cfg *service.Config) error {
return trace.Wrap(err) return trace.Wrap(err)
} }
} }
// apply command line --debug flag to override logger severity
if clf.Debug {
fileConf.Logger.Severity = teleport.DebugLevel
}
if err = ApplyFileConfig(fileConf, cfg); err != nil { if err = ApplyFileConfig(fileConf, cfg); err != nil {
return trace.Wrap(err) return trace.Wrap(err)
} }
@ -826,10 +835,9 @@ func Configure(clf *CommandLineFlags, cfg *service.Config) error {
cfg.Proxy.DisableTLS = clf.DisableTLS cfg.Proxy.DisableTLS = clf.DisableTLS
} }
// apply --debug flag: // apply --debug flag to config:
if clf.Debug { if clf.Debug {
cfg.Console = ioutil.Discard cfg.Console = ioutil.Discard
utils.InitLogger(utils.LoggingForDaemon, log.DebugLevel)
cfg.Debug = clf.Debug cfg.Debug = clf.Debug
} }

View file

@ -23,21 +23,23 @@ import (
"log/syslog" "log/syslog"
"os" "os"
"github.com/gravitational/trace"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
logrusSyslog "github.com/sirupsen/logrus/hooks/syslog" logrusSyslog "github.com/sirupsen/logrus/hooks/syslog"
) )
// SwitchLoggingtoSyslog tells the logger to send the output to syslog. This // SwitchLoggingtoSyslog tells the logger to send the output to syslog. This
// code is behind a build flag because Windows does not support syslog. // code is behind a build flag because Windows does not support syslog.
func SwitchLoggingtoSyslog() { func SwitchLoggingtoSyslog() error {
log.StandardLogger().SetHooks(make(log.LevelHooks)) log.StandardLogger().SetHooks(make(log.LevelHooks))
hook, err := logrusSyslog.NewSyslogHook("", "", syslog.LOG_WARNING, "") hook, err := logrusSyslog.NewSyslogHook("", "", syslog.LOG_WARNING, "")
if err != nil { if err != nil {
// syslog not available // syslog is not available
log.SetOutput(os.Stderr) log.SetOutput(os.Stderr)
} else { return trace.Wrap(err)
// ... and disable stderr:
log.AddHook(hook)
log.SetOutput(ioutil.Discard)
} }
log.AddHook(hook)
// ... and disable stderr:
log.SetOutput(ioutil.Discard)
return nil
} }