[mirror] yet another tui rss reader github.com/olexsmir/smutok

feat: set log level

olexsmir.xyz 63bd5971 cadefa6d

verified
Changed files
+42 -11
internal
+35 -10
app.go
··· 25 25 return nil, err 26 26 } 27 27 28 - if outputToFile { 29 - if lerr := setupLogger(cfg); lerr != nil { 30 - return nil, lerr 31 - } 28 + if lerr := setupLogger(cfg, outputToFile); lerr != nil { 29 + return nil, lerr 32 30 } 33 31 34 32 store, err := store.NewSQLite(cfg.DBPath) ··· 65 63 }, nil 66 64 } 67 65 68 - func getAuthToken(ctx context.Context, fr *freshrss.Client, db *store.Sqlite, cfg *config.Config) (string, error) { 66 + func getAuthToken( 67 + ctx context.Context, 68 + fr *freshrss.Client, 69 + db *store.Sqlite, 70 + cfg *config.Config, 71 + ) (string, error) { 69 72 token, err := db.GetToken(ctx) 70 73 if err == nil { 71 74 return token, nil ··· 113 116 return token, nil 114 117 } 115 118 116 - func setupLogger(cfg *config.Config) error { 117 - file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o666) 118 - if err != nil { 119 - return err 119 + var ( 120 + ErrUnknownLevel = errors.New("unknown log level") 121 + loggerLevels = map[string]slog.Level{ 122 + "info": slog.LevelInfo, 123 + "debug": slog.LevelDebug, 124 + "error": slog.LevelError, 125 + "warn": slog.LevelWarn, 126 + } 127 + ) 128 + 129 + func setupLogger(cfg *config.Config, outputToFile bool) error { 130 + out := os.Stdout 131 + if outputToFile { 132 + file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o666) 133 + if err != nil { 134 + return err 135 + } 136 + out = file 137 + } 138 + 139 + logLevel, ok := loggerLevels[cfg.LogLevel] 140 + if !ok { 141 + return ErrUnknownLevel 120 142 } 121 - logger := slog.New(slog.NewTextHandler(file, nil)) 143 + 144 + logger := slog.New(slog.NewTextHandler(out, &slog.HandlerOptions{ 145 + Level: logLevel, 146 + })) 122 147 slog.SetDefault(logger) 123 148 return nil 124 149 }
+1
internal/config/config.go
··· 27 27 28 28 type Config struct { 29 29 DBPath string 30 + LogLevel string `toml:"log_level"` 30 31 LogFilePath string 31 32 FreshRSS struct { 32 33 Host string `toml:"host"`
+2
internal/config/config.toml
··· 1 + log_level = "info" # or "debug", "error", "warn" 2 + 1 3 [freshrss] 2 4 host = "https://example.com/api/greader.php" 3 5 username = "username"
+4 -1
main.go
··· 78 78 if err := config.Init(); err != nil { 79 79 return fmt.Errorf("failed to init config: %w", err) 80 80 } 81 - slog.Info("Config was initialized, enter your credentials", "file", config.MustGetConfigFilePath()) 81 + slog.Info( 82 + "Config was initialized, enter your credentials", 83 + "file", config.MustGetConfigFilePath(), 84 + ) 82 85 return nil 83 86 }