logger.go

 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}