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..c911b2ec6 --- /dev/null +++ b/logging/logger.go @@ -0,0 +1,44 @@ +package logging + +import ( + "io" + "io/ioutil" + "log" + "os" +) + +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 + } + + 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())