diff --git a/cmd/root.go b/cmd/root.go index e0e8af2..0ee98c2 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -24,6 +24,8 @@ var command = &cobra.Command{ viper.SetEnvPrefix("XIP") viper.AutomaticEnv() + utils.InitLogger(viper.GetString("log-file")) + email := viper.GetString("Email") _, err := mail.ParseAddress(email) if err != nil { @@ -84,6 +86,9 @@ var command = &cobra.Command{ } func Execute() { + command.Flags().String("log-file", utils.DefaultLogFile, "Path to log file") + viper.BindPFlag("log-file", command.Flags().Lookup("log-file")) + command.Flags().Uint("dns-port", 53, "Port for the DNS server") viper.BindPFlag("dns-port", command.Flags().Lookup("dns-port")) diff --git a/utils/logger.go b/utils/logger.go index fc8c131..6a8583e 100644 --- a/utils/logger.go +++ b/utils/logger.go @@ -8,14 +8,25 @@ import ( "gopkg.in/natefinch/lumberjack.v2" ) -var consoleWriter = zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339} -var fileWriter = &lumberjack.Logger{ - Filename: "/var/log/local-ip.sh.log", - MaxBackups: 3, - MaxSize: 1, // megabytes - MaxAge: 1, // days - Compress: true, // disabled by default -} -var multi = zerolog.MultiLevelWriter(consoleWriter, fileWriter) +const DefaultLogFile = "/var/log/local-ip.sh.log" -var Logger = zerolog.New(multi).With().Timestamp().Logger() +var consoleWriter = zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339} + +var Logger = zerolog.New(consoleWriter).With().Timestamp().Logger() + +func InitLogger(logFile string) { + if logFile == "" { + logFile = DefaultLogFile + } + + fileWriter := &lumberjack.Logger{ + Filename: logFile, + MaxBackups: 3, + MaxSize: 1, + MaxAge: 1, + Compress: true, + } + + multi := zerolog.MultiLevelWriter(consoleWriter, fileWriter) + Logger = zerolog.New(multi).With().Timestamp().Logger() +}