diff --git a/config/config.go b/config/config.go index 28ede68..42a7133 100644 --- a/config/config.go +++ b/config/config.go @@ -1,10 +1,11 @@ package config import ( - "log" "os" "strings" + log "github.com/sirupsen/logrus" + "github.com/spf13/viper" ) diff --git a/config/types.go b/config/types.go index 3680e87..341b232 100644 --- a/config/types.go +++ b/config/types.go @@ -16,7 +16,6 @@ type server struct { Address string `yaml:"address"` ExternalUrl string `yaml:"external_url"` DebugMode string `yaml:"debug_mode"` - FileLogger string `yaml:"file_logger"` } type database struct { diff --git a/logger/logrus.go b/logger/logrus.go index 849aaa8..c40cb1c 100644 --- a/logger/logrus.go +++ b/logger/logrus.go @@ -1,36 +1,46 @@ package logger import ( + "io" "os" "github.com/gin-gonic/gin" - log "github.com/sirupsen/logrus" - "github.com/spf13/viper" + "github.com/sirupsen/logrus" ) func Init() { - FileLogger := viper.GetBool("server.file_logger") - DebugMode := viper.GetBool("server.debug_mode") - - if FileLogger == true { - gin.DisableConsoleColor() - file, err := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666) - if err != nil { - log.Panicln("Error opening log file: ", err) - } - log.SetFormatter(&log.JSONFormatter{}) - log.SetOutput(file) - log.SetLevel(log.DebugLevel) - } else { - log.SetFormatter(&log.JSONFormatter{}) - log.SetOutput(os.Stdout) - log.SetLevel(log.WarnLevel) + levelStr := os.Getenv("LOG_LEVEL") + level, err := logrus.ParseLevel(levelStr) + if err != nil { + level = logrus.InfoLevel } + logrus.SetLevel(level) - if DebugMode == true { + if level == logrus.DebugLevel { gin.SetMode(gin.DebugMode) - log.SetLevel(log.DebugLevel) } else { gin.SetMode(gin.ReleaseMode) + gin.DisableConsoleColor() } + + logrus.SetFormatter(&logrus.JSONFormatter{ + TimestampFormat: "2006-01-02 15:04:05", + }) + + logrus.SetReportCaller(true) + + file, err := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666) + if err != nil { + logrus.SetOutput(os.Stdout) + logrus.Errorf("Error to create log file: %v", err) + } else { + logrus.SetOutput(io.MultiWriter(os.Stdout, file)) + } + + logrus.RegisterExitHandler(func() { + if file != nil { + file.Sync() + file.Close() + } + }) } diff --git a/main.go b/main.go index f16e285..b0763ac 100644 --- a/main.go +++ b/main.go @@ -8,8 +8,8 @@ import ( ) func main() { - config.Init() logger.Init() + config.Init() data.Init() server.Start() } diff --git a/middleware/gin_logger.go b/middleware/gin_logger.go index 0a3e4ff..0b30d9d 100644 --- a/middleware/gin_logger.go +++ b/middleware/gin_logger.go @@ -7,9 +7,10 @@ import ( "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" + log "github.com/sirupsen/logrus" ) -func GinLogger(log *logrus.Logger) gin.HandlerFunc { +func GinLogger() gin.HandlerFunc { return func(c *gin.Context) { var body []byte if c.Request.Body != nil {