// Package log constructs the process-wide structured logger. // // Every record carries the broker's build info so aggregated log backends can // correlate events across versions and deployments. package log import ( "io" "log/slog" "kode.naiv.no/olemd/forgejo-mcp-broker/internal/buildinfo" ) // New returns a JSON slog.Logger writing to w. When debug is true the // logger starts at Debug level, otherwise at Info. func New(w io.Writer, debug bool) *slog.Logger { level := slog.LevelInfo if debug { level = slog.LevelDebug } h := slog.NewJSONHandler(w, &slog.HandlerOptions{Level: level}) return slog.New(h).With( slog.String("service", "fjmcp-broker"), slog.String("version", buildinfo.Version), slog.String("git_rev", buildinfo.GitRevision), ) } // Discard returns a logger that drops every record. Useful in tests. func Discard() *slog.Logger { return slog.New(slog.DiscardHandler) }