1package log
 2
 3import (
 4	"os"
 5	"path/filepath"
 6	"strconv"
 7	"strings"
 8	"time"
 9
10	"github.com/charmbracelet/log"
11	"github.com/charmbracelet/soft-serve/server/config"
12)
13
14var contextKey = &struct{ string }{"logger"}
15
16// NewDefaultLogger returns a new logger with default settings.
17func NewDefaultLogger() *log.Logger {
18	dp := os.Getenv("SOFT_SERVE_DATA_PATH")
19	if dp == "" {
20		dp = "data"
21	}
22
23	cfg, err := config.ParseConfig(filepath.Join(dp, "config.yaml"))
24	if err != nil {
25		log.Errorf("failed to parse config: %v", err)
26	}
27
28	logger := log.NewWithOptions(os.Stderr, log.Options{
29		ReportTimestamp: true,
30		TimeFormat:      time.DateOnly,
31	})
32
33	if debug, _ := strconv.ParseBool(os.Getenv("SOFT_SERVE_DEBUG")); debug {
34		logger.SetLevel(log.DebugLevel)
35
36		if verbose, _ := strconv.ParseBool(os.Getenv("SOFT_SERVE_VERBOSE")); verbose {
37			logger.SetReportCaller(true)
38		}
39	}
40
41	logger.SetTimeFormat(cfg.Log.TimeFormat)
42
43	switch strings.ToLower(cfg.Log.Format) {
44	case "json":
45		logger.SetFormatter(log.JSONFormatter)
46	case "logfmt":
47		logger.SetFormatter(log.LogfmtFormatter)
48	case "text":
49		logger.SetFormatter(log.TextFormatter)
50	}
51
52	return logger
53}