all repos

smutok @ 63bd597

yet another tui rss reader (not abandoned, just paused development)
4 files changed, 42 insertions(+), 11 deletions(-)
feat: set log level
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2025-12-28 19:20:24 +0200
Change ID: nnllpwzqklrumnmtorosvsrrkrumuzkp
Parent: cadefa6
M app.go

@@ -25,10 +25,8 @@ if err != nil {

return nil, err } - if outputToFile { - if lerr := setupLogger(cfg); lerr != nil { - return nil, lerr - } + if lerr := setupLogger(cfg, outputToFile); lerr != nil { + return nil, lerr } store, err := store.NewSQLite(cfg.DBPath)

@@ -65,7 +63,12 @@ freshrssWorker: fw,

}, nil } -func getAuthToken(ctx context.Context, fr *freshrss.Client, db *store.Sqlite, cfg *config.Config) (string, error) { +func getAuthToken( + ctx context.Context, + fr *freshrss.Client, + db *store.Sqlite, + cfg *config.Config, +) (string, error) { token, err := db.GetToken(ctx) if err == nil { return token, nil

@@ -113,12 +116,34 @@

return token, nil } -func setupLogger(cfg *config.Config) error { - file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o666) - if err != nil { - return err +var ( + ErrUnknownLevel = errors.New("unknown log level") + loggerLevels = map[string]slog.Level{ + "info": slog.LevelInfo, + "debug": slog.LevelDebug, + "error": slog.LevelError, + "warn": slog.LevelWarn, + } +) + +func setupLogger(cfg *config.Config, outputToFile bool) error { + out := os.Stdout + if outputToFile { + file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o666) + if err != nil { + return err + } + out = file + } + + logLevel, ok := loggerLevels[cfg.LogLevel] + if !ok { + return ErrUnknownLevel } - logger := slog.New(slog.NewTextHandler(file, nil)) + + logger := slog.New(slog.NewTextHandler(out, &slog.HandlerOptions{ + Level: logLevel, + })) slog.SetDefault(logger) return nil }
M internal/config/config.go

@@ -27,6 +27,7 @@ )

type Config struct { DBPath string + LogLevel string `toml:"log_level"` LogFilePath string FreshRSS struct { Host string `toml:"host"`
M internal/config/config.toml

@@ -1,3 +1,5 @@

+log_level = "info" # or "debug", "error", "warn" + [freshrss] host = "https://example.com/api/greader.php" username = "username"
M main.go

@@ -78,6 +78,9 @@ func initConfig(ctx context.Context, c *cli.Command) error {

if err := config.Init(); err != nil { return fmt.Errorf("failed to init config: %w", err) } - slog.Info("Config was initialized, enter your credentials", "file", config.MustGetConfigFilePath()) + slog.Info( + "Config was initialized, enter your credentials", + "file", config.MustGetConfigFilePath(), + ) return nil }