You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.2 KiB
62 lines
1.2 KiB
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)
|
|
}
|
|
}
|
|
|