log.go

 1package log
 2
 3import (
 4	"os"
 5	"strconv"
 6	"strings"
 7	"time"
 8
 9	"github.com/charmbracelet/log"
10)
11
12var contextKey = &struct{ string }{"logger"}
13
14// NewDefaultLogger returns a new logger with default settings.
15func NewDefaultLogger() *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
25	if tsfmt := os.Getenv("SOFT_SERVE_LOG_TIME_FORMAT"); tsfmt != "" {
26		logger.SetTimeFormat(tsfmt)
27	}
28
29	switch strings.ToLower(os.Getenv("SOFT_SERVE_LOG_FORMAT")) {
30	case "json":
31		logger.SetFormatter(log.JSONFormatter)
32	case "logfmt":
33		logger.SetFormatter(log.LogfmtFormatter)
34	case "text":
35		logger.SetFormatter(log.TextFormatter)
36	}
37
38	return logger
39}