1package log23import (4 "os"5 "strings"6 "time"78 "github.com/charmbracelet/log/v2"9 "github.com/charmbracelet/soft-serve/pkg/config"10)1112// NewLogger returns a new logger with default settings.13func NewLogger(cfg *config.Config) (*log.Logger, *os.File, error) {14 if cfg == nil {15 return nil, nil, config.ErrNilConfig16 }17 logger := log.NewWithOptions(os.Stderr, log.Options{18 ReportTimestamp: true,19 TimeFormat: time.DateOnly,20 })2122 switch {23 case config.IsVerbose():24 logger.SetReportCaller(true)25 fallthrough26 case config.IsDebug():27 logger.SetLevel(log.DebugLevel)28 }2930 logger.SetTimeFormat(cfg.Log.TimeFormat)3132 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 }4041 var f *os.File42 if cfg.Log.Path != "" {43 var err error44 f, err = os.OpenFile(cfg.Log.Path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)45 if err != nil {46 return nil, nil, err47 }48 logger.SetOutput(f)49 }5051 return logger, f, nil52}