Files
go-api-template/config.go

59 lines
1.7 KiB
Go

package main
import (
"os"
"time"
"github.com/kkyr/fig"
"github.com/rs/zerolog"
)
type Config struct {
Timezone string `fig:"tz" default:"America/New_York"`
Server struct {
Port string `fig:"port" default:"3000"`
}
Logger struct {
Level string `fig:"loglevel" default:"info"`
LoggingFile string `fig:"loggingFile" default:"./app/log/goInventorize.log"`
}
}
func LoadConfig(s *Server) error {
var cfg Config
err := fig.Load(&cfg, fig.File("config.yaml"), fig.Dirs("./app/config"), fig.UseEnv("")) // Load in config.yaml, then overwrite with ENV variables
if err != nil {
return err
}
logFile, err := os.OpenFile(cfg.Logger.LoggingFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) // Open/Create log file for writting to log
if err != nil {
return err
}
switch cfg.Logger.Level { // Setting our logging level
case "error":
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
case "warn":
zerolog.SetGlobalLevel(zerolog.WarnLevel)
case "debug":
zerolog.SetGlobalLevel(zerolog.DebugLevel)
default:
zerolog.SetGlobalLevel(zerolog.InfoLevel)
}
loc, err := time.LoadLocation(cfg.Timezone) // Getting our timezone info from config
if err != nil {
return err
}
s.LogFile = logFile
zerolog.TimestampFunc = func() time.Time { // Making sure our logger writes in the correct tz
return time.Now().In(loc)
}
s.Log = zerolog.New(logFile).With().Timestamp().Logger()
defer logFile.Close()
s.Log.Info().Msg("Configuration loaded successfully...")
s.Log.Debug().Msgf("Values: Server Port: %s Logging File: %s Logging Level: %s Timezone: %s", cfg.Server.Port, cfg.Logger.LoggingFile, cfg.Logger.Level, cfg.Timezone)
s.Config = &cfg
return nil
}