diff --git a/cmd/ctrld/cli.go b/cmd/ctrld/cli.go index 8ef9b5d..6eb65f6 100644 --- a/cmd/ctrld/cli.go +++ b/cmd/ctrld/cli.go @@ -31,7 +31,12 @@ func initCLI() { Short: "Running Control-D DNS proxy server", Version: "1.0.1", } - rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose log output") + rootCmd.PersistentFlags().CountVarP( + &verbose, + "verbose", + "v", + `verbose log output, "-v" means query logging enabled, "-vv" means debug level logging enabled`, + ) runCmd := &cobra.Command{ Use: "run", diff --git a/cmd/ctrld/main.go b/cmd/ctrld/main.go index 7b539eb..b916ee7 100644 --- a/cmd/ctrld/main.go +++ b/cmd/ctrld/main.go @@ -15,7 +15,7 @@ var ( configPath string daemon bool cfg ctrld.Config - verbose bool + verbose int bootstrapDNS = "76.76.2.0" @@ -42,21 +42,27 @@ func initLogging() { writers = append(writers, logFile) } zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs - if verbose || isLog { - consoleWriter := zerolog.NewConsoleWriter(func(w *zerolog.ConsoleWriter) { - w.TimeFormat = time.StampMilli - }) - writers = append(writers, consoleWriter) - multi := zerolog.MultiLevelWriter(writers...) - mainLog = mainLog.Output(multi).With().Timestamp().Str("prefix", "main").Logger() + consoleWriter := zerolog.NewConsoleWriter(func(w *zerolog.ConsoleWriter) { + w.TimeFormat = time.StampMilli + }) + writers = append(writers, consoleWriter) + multi := zerolog.MultiLevelWriter(writers...) + mainLog = mainLog.Output(multi).With().Timestamp().Str("prefix", "main").Logger() + if verbose > 0 || isLog { proxyLog = proxyLog.Output(multi).With().Timestamp().Logger() // TODO: find a better way. ctrld.ProxyLog = proxyLog } - if cfg.Service.LogLevel == "" { + + zerolog.SetGlobalLevel(zerolog.InfoLevel) + logLevel := cfg.Service.LogLevel + if verbose > 1 { + logLevel = "debug" + } + if logLevel == "" { return } - level, err := zerolog.ParseLevel(cfg.Service.LogLevel) + level, err := zerolog.ParseLevel(logLevel) if err != nil { mainLog.Warn().Err(err).Msg("could not set log level") return diff --git a/cmd/ctrld/prog.go b/cmd/ctrld/prog.go index c7dce9d..49b6c0e 100644 --- a/cmd/ctrld/prog.go +++ b/cmd/ctrld/prog.go @@ -79,7 +79,7 @@ func (p *prog) run() { default: continue } - proxyLog.Info().Str("bootstrap_ip", uc.BootstrapIP).Msgf("Setting bootstrap IP for upstream.%s", n) + mainLog.Info().Str("bootstrap_ip", uc.BootstrapIP).Msgf("Setting bootstrap IP for upstream.%s", n) // Stop if we reached here, because we got the bootstrap IP from r.Answer. break } @@ -101,7 +101,7 @@ func (p *prog) run() { return } addr := net.JoinHostPort(listenerConfig.IP, strconv.Itoa(listenerConfig.Port)) - proxyLog.Info().Msgf("Starting DNS server on listener.%s: %s", listenerNum, addr) + mainLog.Info().Msgf("Starting DNS server on listener.%s: %s", listenerNum, addr) err := p.serveUDP(listenerNum) if err != nil && !defaultConfigWritten { proxyLog.Error().Err(err).Msgf("Unable to start dns proxy on listener.%s", listenerNum) @@ -130,7 +130,7 @@ func (p *prog) run() { }, }) writeConfigFile() - proxyLog.Info().Msgf("Starting DNS server on listener.%s: %s", listenerNum, pc.LocalAddr()) + mainLog.Info().Msgf("Starting DNS server on listener.%s: %s", listenerNum, pc.LocalAddr()) // There can be a race between closing the listener and start our own UDP server, but it's // rare, and we only do this once, so let conservative here. if err := pc.Close(); err != nil {