diff --git a/.gitignore b/.gitignore index a2830b2..7cde45b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ bot.token bingobot +bingobot.log \ No newline at end of file diff --git a/config.go b/config.go index cf314d4..0ad5290 100644 --- a/config.go +++ b/config.go @@ -15,6 +15,7 @@ type AppConfig struct { LogMaxBackups int `yaml:"log_max_backups"` LogMaxAgeDays int `yaml:"log_max_age_days"` LogCompression bool `yaml:"log_compression"` + LogAddSource bool `yaml:"log_add_source"` } func parseConfigs() error { @@ -43,9 +44,10 @@ func parseConfigs() error { func setDefaults() { viper.SetDefault("LogFile", "bingobot.log") - viper.SetDefault("LogDir", "bingobot.log") + viper.SetDefault("LogDir", "log") viper.SetDefault("LogMaxSizeMB", 500) viper.SetDefault("LogMaxBackups", 3) viper.SetDefault("LogMaxAgeDays", 365) viper.SetDefault("LogCompression", false) + viper.SetDefault("LogAddSource", true) } diff --git a/go.mod b/go.mod index 9996348..098417e 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.23.2 require ( github.com/bwmarrin/discordgo v0.28.1 github.com/spf13/viper v1.19.0 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 ) require ( diff --git a/go.sum b/go.sum index 82d11d7..9004cbb 100644 --- a/go.sum +++ b/go.sum @@ -78,6 +78,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogR gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/log.go b/log.go new file mode 100644 index 0000000..58f3d6d --- /dev/null +++ b/log.go @@ -0,0 +1,27 @@ +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 0c5aa7c..8ee45b7 100644 --- a/main.go +++ b/main.go @@ -27,25 +27,37 @@ func main() { log.Fatal(err) } - startBot() + initLogger() + + err = startBot() + + if err != nil { + log.Fatal(err) + } } -func startBot() { +func startBot() error { session, _ := discordgo.New("Bot " + *Token) err := session.Open() if err != nil { - log.Fatalf("could not open session: %s", err) + Log.Error("could not open discord session", "type", "error", "error", err) + return err } + Log.Info("shutting down gracefully", "type", "shutdown") + sigch := make(chan os.Signal, 1) signal.Notify(sigch, os.Interrupt) <-sigch - log.Printf("shutting down gracefully...") + Log.Info("shutting down gracefully", "type", "shutdown") err = session.Close() if err != nil { - log.Printf("could not close session gracefully: %s", err) + Log.Error("could not close discord session gracefully", "type", "error", "error", err) + return err } + + return nil }