diff options
-rw-r--r-- | init.go | 80 | ||||
-rw-r--r-- | main.go | 1 | ||||
-rw-r--r-- | types.go | 7 |
3 files changed, 58 insertions, 30 deletions
diff --git a/init.go b/init.go index f37968c..fdadca8 100644 --- a/init.go +++ b/init.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "log" "os" "time" @@ -12,9 +13,10 @@ import ( // command line flags var ( - port *int = pflag.IntP("port", "p", 9001, "getwtxt will serve from this port") - logfile *string = pflag.StringP("logfile", "l", "getwtxt.log", "File for logging output") - twtxtfile *string = pflag.StringP("twtxtfile", "f", "/var/twtxt/twtxt.txt", "Registry file for getwtxt") + port *int = pflag.IntP("port", "p", 9001, "getwtxt will serve from this port") + logfile *string = pflag.StringP("logfile", "l", "getwtxt.log", "File for logging output") + twtxtfile *string = pflag.StringP("twtxtfile", "f", "/var/twtxt/twtxt.txt", "Registry file for getwtxt") + stdoutLogging *bool = pflag.BoolP("stdout", "o", true, "Log to stdout rather than to a file") ) // config object @@ -24,24 +26,23 @@ var confObj = &configuration{} var closelog = make(chan bool, 1) func init() { - + titleScreen() initConfig() - - pflag.Parse() - viper.BindPFlags(pflag.CommandLine) - initLogging() } func initConfig() { - viper.SetConfigName("getwtxt") + pflag.Parse() + viper.BindPFlags(pflag.CommandLine) + viper.SetConfigName("getwtxt") viper.AddConfigPath(".") viper.AddConfigPath("/usr/local/getwtxt") viper.AddConfigPath("/etc") viper.AddConfigPath("/usr/local/etc") + log.Printf("Loading configuration ...\n") if err := viper.ReadInConfig(); err != nil { log.Printf("Error reading config file: %v\n", err) log.Printf("Using defaults ...\n") @@ -62,40 +63,67 @@ func initConfig() { confObj.port = viper.GetInt("port") confObj.logfile = viper.GetString("logfile") confObj.twtxtfile = viper.GetString("twtxtfile") + confObj.stdoutLogging = viper.GetBool("stdoutLogging") } func initLogging() { - logfile, err := os.OpenFile(confObj.logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600) - if err != nil { - log.Printf("Could not open log file: %v\n", err) - } + // only open a log file if it's necessary + if !confObj.stdoutLogging { - // Listen for the signal to close the log file - // in a separate thread - go func() { - <-closelog - log.Printf("Closing log file ...\n") - err = logfile.Close() + logfile, err := os.OpenFile(confObj.logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600) if err != nil { - log.Printf("Couldn't close log file: %v\n", err) + log.Printf("Could not open log file: %v\n", err) } - }() - log.SetOutput(logfile) + // Listen for the signal to close the log file + // in a separate thread + go func() { + <-closelog + log.Printf("Closing log file ...\n") + err = logfile.Close() + if err != nil { + log.Printf("Couldn't close log file: %v\n", err) + } + }() + + log.SetOutput(logfile) + + } else { + log.SetOutput(os.Stdout) + } } func rebindConfig() { + // signal to close the log file then wait + if !confObj.stdoutLogging { + closelog <- true + time.Sleep(50 * time.Millisecond) + } + // reassign values to the config object confObj.port = viper.GetInt("port") confObj.logfile = viper.GetString("logfile") confObj.twtxtfile = viper.GetString("twtxtfile") - - // signal to close the log file then wait - closelog <- true - time.Sleep(50 * time.Millisecond) + confObj.stdoutLogging = viper.GetBool("stdoutLogging") // reinitialize logging initLogging() } + +func titleScreen() { + fmt.Printf(` + + _ _ _ + __ _ ___| |___ _| |___ _| |_ + / _ |/ _ \ __\ \ /\ / / __\ \/ / __| +| (_| | __/ |_ \ V V /| |_ > <| |_ + \__, |\___|\__| \_/\_/ \__/_/\_\\__| + |___/ + version ` + getwtxt + ` + github.com/gbmor/getwtxt + GPL v3 + +`) +} diff --git a/main.go b/main.go index 3611c05..ef083dc 100644 --- a/main.go +++ b/main.go @@ -13,7 +13,6 @@ import ( const getwtxt = "0.1" func main() { - log.Printf("getwtxt " + getwtxt + "\n") // more precise path-based routing index := mux.NewRouter() diff --git a/types.go b/types.go index 5ca2f90..597c423 100644 --- a/types.go +++ b/types.go @@ -6,7 +6,8 @@ const htmlutf8 = "text/html; charset=utf8" // config object definition type configuration struct { - port int - logfile string - twtxtfile string + port int + logfile string + twtxtfile string + stdoutLogging bool } |