1package logger
2
3import (
4 "context"
5 "os"
6 "strconv"
7 "strings"
8 "time"
9
10 "github.com/charmbracelet/log"
11 "github.com/charmbracelet/soft-serve/server/config"
12)
13
14// NewDefaultLogger returns a new logger with default settings.
15func NewDefaultLogger(ctx context.Context) *log.Logger {
16 logger := log.NewWithOptions(os.Stderr, log.Options{
17 ReportTimestamp: true,
18 TimeFormat: time.DateOnly,
19 })
20
21 if debug, _ := strconv.ParseBool(os.Getenv("SOFT_SERVE_DEBUG")); debug {
22 logger.SetLevel(log.DebugLevel)
23
24 if verbose, _ := strconv.ParseBool(os.Getenv("SOFT_SERVE_VERBOSE")); verbose {
25 logger.SetReportCaller(true)
26 }
27 }
28
29 cfg := config.FromContext(ctx)
30 logger.SetTimeFormat(cfg.Log.TimeFormat)
31
32 switch strings.ToLower(cfg.Log.Format) {
33 case "json":
34 logger.SetFormatter(log.JSONFormatter)
35 case "logfmt":
36 logger.SetFormatter(log.LogfmtFormatter)
37 case "text":
38 logger.SetFormatter(log.TextFormatter)
39 }
40
41 return logger
42}