// UpdateLoggingFlagsFromConfig extracts the logging-related options from // the provided config and sets flags in the given flagset func UpdateLoggingFlagsFromConfig(flagset *flag.FlagSet, conf *Config) { err := flagset.Lookup("v").Value.Set(strconv.Itoa(conf.Verbosity)) if err != nil { glog.Errorf("Failed to apply config.Verbosity to flag.v: %v", err) } err = flagset.Lookup("logtostderr").Value.Set("true") if err != nil { glog.Errorf("Failed to set flag.logtostderr to true: %v", err) } if conf.Verbosity > 2 { etcd.SetLogger(log.New(os.Stdout, "go-etcd", log.LstdFlags)) } else { etcd.SetLogger(log.New(ioutil.Discard, "go-etcd", log.LstdFlags)) } }
func main() { // We use a FlagSets since glog adds a bunch of flags we do not want to publish userset := flag.NewFlagSet("fleet", flag.ExitOnError) printVersion := userset.Bool("version", false, "Print the version and exit") cfgPath := userset.String("config", "/etc/fleet/fleet.conf", "Path to config file") err := userset.Parse(os.Args[1:]) if err == flag.ErrHelp { userset.Usage() syscall.Exit(1) } if *printVersion { fmt.Println("fleet version", version.Version) os.Exit(0) } cfgset := flag.NewFlagSet("fleet", flag.ExitOnError) cfgset.Int("verbosity", 0, "Logging level") cfgset.Var(&stringSlice{}, "etcd_servers", "List of etcd endpoints") cfgset.String("boot_id", "", "Override default BootID of fleet machine") cfgset.String("public_ip", "", "IP address that fleet machine should publish") cfgset.String("metadata", "", "List of key-value metadata to assign to the fleet machine") cfgset.String("unit_prefix", "", "Prefix that should be used for all systemd units") cfgset.String("agent_ttl", agent.DefaultTTL, "TTL in seconds of fleet machine state in etcd") globalconf.Register("", cfgset) cfg, err := getConfig(cfgset, *cfgPath) if err != nil { glog.Error(err.Error()) syscall.Exit(1) } config.UpdateLoggingFlagsFromConfig(cfg) etcd.SetLogger(etcdLogger{}) srv := server.New(*cfg) srv.Run() reconfigure := func() { glog.Infof("Reloading configuration from %s", *cfgPath) cfg, err := getConfig(cfgset, *cfgPath) if err != nil { glog.Errorf(err.Error()) syscall.Exit(1) } srv.Stop() config.UpdateLoggingFlagsFromConfig(cfg) srv = server.New(*cfg) srv.Run() } shutdown := func() { glog.Infof("Gracefully shutting down") srv.Stop() srv.Purge() syscall.Exit(0) } signals := map[os.Signal]func(){ syscall.SIGHUP: reconfigure, syscall.SIGTERM: shutdown, syscall.SIGINT: shutdown, } listenForSignals(signals) }
func EnableDebugLogging() { goetcd.SetLogger(log.New(os.Stdout, "go-etcd", log.LstdFlags)) }
func DisableDebugLogging() { goetcd.SetLogger(log.New(ioutil.Discard, "go-etcd", log.LstdFlags)) }
func main() { // We use a custom FlagSet since golang/glog adds a bunch of flags we // do not want to publish flagset := flag.NewFlagSet("fleet", flag.ExitOnError) printVersion := flagset.Bool("version", false, "Prints the version.") cfgPath := flagset.String("config", "", "Path to config file.") err := flagset.Parse(os.Args[1:]) // We do this manually since we're using a custom FlagSet if err == flag.ErrHelp { flag.Usage() syscall.Exit(1) } if *printVersion { fmt.Println("fleet version", version.Version) os.Exit(0) } // Print out to stderr by default (stderr instead of stdout due to glog's choices) flag.Lookup("logtostderr").Value.Set("true") cfg, err := loadConfigFromPath(*cfgPath) if err != nil { glog.Errorf(err.Error()) syscall.Exit(1) } etcd.SetLogger(etcdLogger{}) srv := server.New(*cfg) srv.Run() reconfigure := func() { glog.Infof("Reloading config file from %s", *cfgPath) cfg, err := loadConfigFromPath(*cfgPath) if err != nil { glog.Errorf(err.Error()) syscall.Exit(1) } else { srv.Stop() srv = server.New(*cfg) srv.Run() } } shutdown := func() { glog.Infof("Gracefully shutting down") srv.Stop() srv.Purge() syscall.Exit(0) } signals := map[os.Signal]func(){ syscall.SIGHUP: reconfigure, syscall.SIGTERM: shutdown, syscall.SIGINT: shutdown, } listenForSignals(signals) }