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.
logrus_init/logger.go

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)
}
}