diff --git a/go.mod b/go.mod index 640efb3..5379980 100644 --- a/go.mod +++ b/go.mod @@ -8,4 +8,5 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect golang.org/x/sys v0.12.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 ) diff --git a/go.sum b/go.sum index 98afda4..88f19dc 100644 --- a/go.sum +++ b/go.sum @@ -13,3 +13,5 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= diff --git a/main.go b/main.go index ba8765d..91c678c 100644 --- a/main.go +++ b/main.go @@ -13,7 +13,9 @@ import ( "strconv" "strings" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "gopkg.in/natefinch/lumberjack.v2" ) var ( @@ -21,13 +23,19 @@ var ( certFlag = flag.String("cert", "", "Path to cert file") keyFlag = flag.String("key", "", "Path to key file") portFlag = flag.Int("port", 80, "Port") + prettyLogsFlag = flag.Bool("pretty", false, "Pretty print? Default is json") + logPathFlag = flag.String("log", "", "Path to logfile, default is stderr") + logLevelFlag = flag.String("log-level", "info", "Log Level") ) func main() { flag.Parse() + + setupLogging() + domains, err := loadConfig(*configFileFlag) if err != nil { - panic(err) + log.Fatal().Err(err).Str("path", *configFileFlag).Msg("Could not load Config") } client := &http.Client{ @@ -137,6 +145,30 @@ func main() { } } +func setupLogging() { + logLevel, err := zerolog.ParseLevel(*logLevelFlag) + if err != nil { + log.Fatal().Err(err).Str("level", *logLevelFlag).Msg("Could not parse string to level") + } + + zerolog.SetGlobalLevel(logLevel) + if *prettyLogsFlag { + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + } + + if *logPathFlag != "" { + var console io.Writer = os.Stderr + if *prettyLogsFlag { + console = zerolog.ConsoleWriter{Out: os.Stderr} + } + log.Logger = log.Output(zerolog.MultiLevelWriter(console, &lumberjack.Logger{ + Filename: *logPathFlag, + MaxAge: 14, + MaxBackups: 10, + })) + } +} + func dumpRequest(w http.ResponseWriter, r *http.Request) bool { if e := log.Debug(); e.Enabled() { rDump, err := httputil.DumpRequest(r, true)