package config import ( "fmt" "github.com/spf13/viper" ) type AppConfig struct { LogFile string `yaml:"log_file"` LogDir string `yaml:"log_dir"` LogMaxSizeMB int `yaml:"log_max_size_mb"` LogMaxBackups int `yaml:"log_max_backups"` LogMaxAgeDays int `yaml:"log_max_age_days"` LogCompression bool `yaml:"log_compression"` } var config *AppConfig func Get() *AppConfig { return config } func Init() error { setDefaults() // automatically populate config with any matching environment vars viper.SetEnvPrefix("BB") viper.AutomaticEnv() viper.SetConfigName("config") viper.SetConfigType("yaml") viper.AddConfigPath(".") err := viper.ReadInConfig() if err != nil { return fmt.Errorf("error reading configs: %s", err) } err = viper.Unmarshal(&config) if err != nil { return fmt.Errorf("error unmarshaling configs: %s", err) } return nil } func setDefaults() { viper.SetDefault("LogFile", "bingobot.log") viper.SetDefault("LogDir", "log") viper.SetDefault("LogMaxSizeMB", 500) viper.SetDefault("LogMaxBackups", 3) viper.SetDefault("LogMaxAgeDays", 365) viper.SetDefault("LogCompression", false) }