Files
minstrel/internal/logging/logging.go
T

43 lines
869 B
Go

package logging
import (
"fmt"
"io"
"log/slog"
"strings"
)
func New(w io.Writer, level, format string) (*slog.Logger, error) {
lvl, err := parseLevel(level)
if err != nil {
return nil, err
}
opts := &slog.HandlerOptions{Level: lvl}
var h slog.Handler
switch strings.ToLower(format) {
case "", "text":
h = slog.NewTextHandler(w, opts)
case "json":
h = slog.NewJSONHandler(w, opts)
default:
return nil, fmt.Errorf("unknown log format %q (want text|json)", format)
}
return slog.New(h), nil
}
func parseLevel(s string) (slog.Level, error) {
switch strings.ToLower(strings.TrimSpace(s)) {
case "", "info":
return slog.LevelInfo, nil
case "debug":
return slog.LevelDebug, nil
case "warn", "warning":
return slog.LevelWarn, nil
case "error":
return slog.LevelError, nil
default:
return 0, fmt.Errorf("unknown log level %q", s)
}
}