bluesky viewer in the terminal
1package utils
2
3import (
4 "os"
5
6 "github.com/charmbracelet/lipgloss"
7 "github.com/charmbracelet/log"
8)
9
10var logger *log.Logger
11
12const (
13 // Blue
14 ColorPrimary = "#31748f"
15 // Yellow/Gold
16 ColorAccent = "#f6c177"
17 // Red/Pink
18 ColorError = "#eb6f92"
19 // Light text
20 ColorText = "#e0def4"
21 // Dark background
22 ColorBG = "#191724"
23)
24
25// InitLogger initializes the global logger with structured logging
26func InitLogger(level log.Level) *log.Logger {
27 logger = log.NewWithOptions(os.Stderr, log.Options{
28 ReportTimestamp: true,
29 TimeFormat: "15:04:05",
30 Level: level,
31 })
32
33 styles := log.DefaultStyles()
34
35 styles.Levels[log.DebugLevel] = lipgloss.NewStyle().SetString("DEBUG").Foreground(lipgloss.Color(ColorText))
36 styles.Levels[log.InfoLevel] = lipgloss.NewStyle().SetString("INFO").Foreground(lipgloss.Color(ColorPrimary))
37 styles.Levels[log.WarnLevel] = lipgloss.NewStyle().SetString("WARN").Foreground(lipgloss.Color(ColorAccent))
38 styles.Levels[log.ErrorLevel] = lipgloss.NewStyle().SetString("ERROR").Foreground(lipgloss.Color(ColorError))
39 styles.Levels[log.FatalLevel] = lipgloss.NewStyle().SetString("FATAL").Foreground(lipgloss.Color(ColorError)).Bold(true)
40
41 logger.SetStyles(styles)
42
43 return logger
44}
45
46// GetLogger returns the global logger instance
47func GetLogger() *log.Logger {
48 if logger == nil {
49 return InitLogger(log.InfoLevel)
50 }
51 return logger
52}