1package log
2
3import (
4 "os"
5 "strconv"
6 "strings"
7 "time"
8
9 "github.com/charmbracelet/log"
10 "github.com/charmbracelet/soft-serve/server/config"
11)
12
13var contextKey = &struct{ string }{"logger"}
14
15// NewDefaultLogger returns a new logger with default settings.
16func NewDefaultLogger() *log.Logger {
17 cfg := config.DefaultConfig()
18 if cfg.Exist() {
19 if err := config.ParseConfig(cfg, cfg.FilePath()); err != nil {
20 log.Errorf("failed to parse config: %v", err)
21 }
22 }
23
24 logger := log.NewWithOptions(os.Stderr, log.Options{
25 ReportTimestamp: true,
26 TimeFormat: time.DateOnly,
27 })
28
29 if debug, _ := strconv.ParseBool(os.Getenv("SOFT_SERVE_DEBUG")); debug {
30 logger.SetLevel(log.DebugLevel)
31
32 if verbose, _ := strconv.ParseBool(os.Getenv("SOFT_SERVE_VERBOSE")); verbose {
33 logger.SetReportCaller(true)
34 }
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}