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
37 logger.SetTimeFormat(cfg.Log.TimeFormat)
38
39 switch strings.ToLower(cfg.Log.Format) {
40 case "json":
41 logger.SetFormatter(log.JSONFormatter)
42 case "logfmt":
43 logger.SetFormatter(log.LogfmtFormatter)
44 case "text":
45 logger.SetFormatter(log.TextFormatter)
46 }
47
48 return logger
49}