diff --git a/config.go b/internal/config/config.go similarity index 82% rename from config.go rename to internal/config/config.go index 0ad5290..28472f5 100644 --- a/config.go +++ b/internal/config/config.go @@ -1,4 +1,4 @@ -package main +package config import ( "fmt" @@ -6,8 +6,6 @@ import ( "github.com/spf13/viper" ) -var appConfig *AppConfig - type AppConfig struct { LogFile string `yaml:"log_file"` LogDir string `yaml:"log_dir"` @@ -18,7 +16,9 @@ type AppConfig struct { LogAddSource bool `yaml:"log_add_source"` } -func parseConfigs() error { +func Parse() (*AppConfig, error) { + var appConfig *AppConfig + setDefaults() // automatically populate config with any matching environment vars @@ -31,15 +31,15 @@ func parseConfigs() error { err := viper.ReadInConfig() if err != nil { - return fmt.Errorf("error reading configs: %s", err) + return nil, fmt.Errorf("error reading configs: %s", err) } err = viper.Unmarshal(&appConfig) if err != nil { - return fmt.Errorf("error unmarshaling configs: %s", err) + return nil, fmt.Errorf("error unmarshaling configs: %s", err) } - return nil + return appConfig, nil } func setDefaults() { diff --git a/config_test.go b/internal/config/config_test.go similarity index 81% rename from config_test.go rename to internal/config/config_test.go index a5eff4e..eb9f022 100644 --- a/config_test.go +++ b/internal/config/config_test.go @@ -1,4 +1,4 @@ -package main +package config import ( "testing" @@ -17,6 +17,8 @@ log_max_backups: 3 log_max_age_days: 365 log_compression: false ` + // the config file is stored in the project root + viper.AddConfigPath("../..") } // test that default configs are working @@ -26,7 +28,7 @@ func TestDefaultConfigs(t *testing.T) { viper.SetDefault(k, v) - err := parseConfigs() + _, err := Parse() if err != nil { t.Error(err) diff --git a/internal/logging/logging.go b/internal/logging/logging.go new file mode 100644 index 0000000..d22af85 --- /dev/null +++ b/internal/logging/logging.go @@ -0,0 +1,42 @@ +package logging + +import ( + "log/slog" + "path/filepath" + + "gitlab.com/whom/bingobot/internal/config" + "gopkg.in/natefinch/lumberjack.v2" +) + +type Logger struct { + *slog.Logger +} + +var ( + logger Logger +) + +func InitLogger(appConfig *config.AppConfig) Logger { + + lj := &lumberjack.Logger{ + Filename: filepath.Join(appConfig.LogDir, appConfig.LogFile), + MaxSize: appConfig.LogMaxSizeMB, + MaxBackups: appConfig.LogMaxBackups, + MaxAge: appConfig.LogMaxAgeDays, + Compress: appConfig.LogCompression, + } + + logger = Logger{ + slog.New( + slog.NewJSONHandler(lj, &slog.HandlerOptions{ + AddSource: appConfig.LogAddSource, + }), + ), + } + + return logger +} + +func GetLogger() Logger { + return logger +} diff --git a/log.go b/log.go deleted file mode 100644 index 58f3d6d..0000000 --- a/log.go +++ /dev/null @@ -1,27 +0,0 @@ -package main - -import ( - "log/slog" - "path/filepath" - - "gopkg.in/natefinch/lumberjack.v2" -) - -var ( - Log *slog.Logger -) - -func initLogger() { - - lj := &lumberjack.Logger{ - Filename: filepath.Join(appConfig.LogDir, appConfig.LogFile), - MaxSize: appConfig.LogMaxSizeMB, - MaxBackups: appConfig.LogMaxBackups, - MaxAge: appConfig.LogMaxAgeDays, - Compress: appConfig.LogCompression, - } - - Log = slog.New(slog.NewJSONHandler(lj, &slog.HandlerOptions{ - AddSource: true, - })) -} diff --git a/main.go b/main.go index 8ee45b7..321ae32 100644 --- a/main.go +++ b/main.go @@ -7,12 +7,17 @@ import ( "os/signal" "github.com/bwmarrin/discordgo" + "gitlab.com/whom/bingobot/internal/config" + "gitlab.com/whom/bingobot/internal/logging" ) var ( Token = flag.String("token", "", "Bot authentication token") App = flag.String("app", "", "Application ID") Guild = flag.String("guild", "", "Guild ID") // Do we want it to be tied to one server? + + appConfig *config.AppConfig + Log logging.Logger ) func main() { @@ -21,13 +26,15 @@ func main() { log.Fatal("application id is not set") } - err := parseConfigs() + var err error + + appConfig, err = config.Parse() if err != nil { log.Fatal(err) } - initLogger() + Log = logging.InitLogger(appConfig) err = startBot()