From f33cc92b3736280a16d2a95f2611056aac681a90 Mon Sep 17 00:00:00 2001 From: David Jimenez Date: Tue, 19 Oct 2021 23:02:24 +0100 Subject: [PATCH 1/2] feat: add debug logger Provide logger implementation that allows writing application logs to a file if `DEBUG` mode environment variable is enabled. Signed-off-by: David Jimenez --- .gitignore | 1 + logging/logger.go | 42 ++++++++++++++++++++++++++++++++++++++++++ main.go | 8 ++++++++ 3 files changed, 51 insertions(+) create mode 100644 logging/logger.go diff --git a/.gitignore b/.gitignore index b11181c46..71f016325 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ revive vendor *.swp dist/ +*.log diff --git a/logging/logger.go b/logging/logger.go new file mode 100644 index 000000000..f15d311f6 --- /dev/null +++ b/logging/logger.go @@ -0,0 +1,42 @@ +package logging + +import ( + "io" + "io/ioutil" + "log" + "os" +) + +var logger *log.Logger + +func GetLogger() (*log.Logger, error) { + if logger != nil { + return logger, nil + } + + var writer io.Writer + var err error + + debugModeEnabled := os.Getenv("DEBUG") == "1" + if debugModeEnabled { + writer, err = os.Create("revive.log") + if err != nil { + return nil, err + } + } else { + // Suppress all logging output if debug mode is disabled + writer = ioutil.Discard + } + + logger = log.New(writer, "", log.LstdFlags) + + if !debugModeEnabled { + // Clear all flags to skip log output formatting step to increase + // performance somewhat if we're not logging anything + logger.SetFlags(0) + } + + logger.Println("Logger initialised") + + return logger, nil +} diff --git a/main.go b/main.go index 12bd465f7..bb842bd13 100644 --- a/main.go +++ b/main.go @@ -13,6 +13,7 @@ import ( "github.com/mgechev/dots" "github.com/mgechev/revive/config" "github.com/mgechev/revive/lint" + "github.com/mgechev/revive/logging" "github.com/mitchellh/go-homedir" ) @@ -29,6 +30,11 @@ func fail(err string) { } func main() { + log, err := logging.GetLogger() + if err != nil { + fail(err.Error()) + } + conf, err := config.GetConfig(configPath) if err != nil { fail(err.Error()) @@ -60,6 +66,8 @@ func main() { fail(err.Error()) } + log.Println("Config loaded") + failures, err := revive.Lint(packages, lintingRules, *conf) if err != nil { fail(err.Error()) From 732eb3ed26b1f1fa4fcd80866da7a7163b4b4bae Mon Sep 17 00:00:00 2001 From: David Jimenez Date: Tue, 19 Oct 2021 23:22:21 +0100 Subject: [PATCH 2/2] style: add missing comment to exported function Signed-off-by: David Jimenez --- logging/logger.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/logging/logger.go b/logging/logger.go index f15d311f6..c911b2ec6 100644 --- a/logging/logger.go +++ b/logging/logger.go @@ -9,6 +9,8 @@ import ( var logger *log.Logger +// GetLogger retrieves an instance of an application logger which outputs +// to a file if the debug flag is enabled func GetLogger() (*log.Logger, error) { if logger != nil { return logger, nil