diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..cf9a1d5 --- /dev/null +++ b/go.mod @@ -0,0 +1,14 @@ +module github.com/PCManiac/logrus_init + +go 1.17 + +require ( + github.com/caarlos0/env/v6 v6.10.0 + github.com/sirupsen/logrus v1.8.1 +) + +require ( + github.com/stretchr/testify v1.4.0 // indirect + golang.org/x/sys v0.0.0-20211109184856-51b60fd695b3 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..c82725f --- /dev/null +++ b/go.sum @@ -0,0 +1,20 @@ +github.com/caarlos0/env/v6 v6.10.0 h1:lA7sxiGArZ2KkiqpOQNf8ERBRWI+v8MWIH+eGjSN22I= +github.com/caarlos0/env/v6 v6.10.0/go.mod h1:hvp/ryKXKipEkcuYjs9mI4bBCg+UI0Yhgm5Zu0ddvwc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211109184856-51b60fd695b3 h1:T6tyxxvHMj2L1R2kZg0uNMpS8ZhB9lRa9XRGTCSA65w= +golang.org/x/sys v0.0.0-20211109184856-51b60fd695b3/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/logger.go b/logger.go new file mode 100644 index 0000000..252eaaa --- /dev/null +++ b/logger.go @@ -0,0 +1,62 @@ +package logrus_init + +import ( + "os" + + "github.com/caarlos0/env/v6" + "github.com/sirupsen/logrus" +) + +func init() { + InitLogger() +} + +type config struct { + Output string `env:"LOG_OUTPUT" envDefault:"stdout"` + FileName string `env:"LOG_FILENAME" envDefault:"app.log"` + Formatter string `env:"LOG_FORMATTER" envDefault:"json"` + Level string `env:"LOG_LEVEL" envDefault:"error"` +} + +func InitLogger() { + log := logrus.StandardLogger() + + var cfg config + if err := env.Parse(&cfg); err != nil { + log.Error("log env vars parse error", err) + } + + logFilename := cfg.FileName + switch cfg.Output { + case "file": + LogOutputFile, err := os.OpenFile(logFilename, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + log.SetOutput(LogOutputFile) + } else { + log.SetOutput(os.Stdout) + } + case "stderr": + log.SetOutput(os.Stderr) + case "stdin": + log.SetOutput(os.Stdin) + case "stdout": + fallthrough + default: + log.SetOutput(os.Stdout) + } + + switch cfg.Formatter { + case "text": + log.SetFormatter(&logrus.TextFormatter{}) + case "json": + fallthrough + default: + log.SetFormatter(&logrus.JSONFormatter{}) + } + + if lvl, err := logrus.ParseLevel(cfg.Level); err != nil { + log.SetLevel(logrus.DebugLevel) + } else { + log.SetLevel(lvl) + } +}