diff --git a/internal/ai/analyzer.go b/internal/ai/analyzer.go index 0ce422a..6d520c2 100644 --- a/internal/ai/analyzer.go +++ b/internal/ai/analyzer.go @@ -7,6 +7,7 @@ import ( "context" "encoding/json" "fmt" + "io" "log/slog" "github.com/optiqor/kerno/internal/doctor" @@ -35,11 +36,15 @@ func NewAnalyzer(cfg AnalyzerConfig) *DefaultAnalyzer { if privacy == "" { privacy = PrivacySummary } + logger := cfg.Logger + if logger == nil { + logger = slog.New(slog.NewTextHandler(io.Discard, nil)) + } return &DefaultAnalyzer{ provider: cfg.Provider, cache: cfg.Cache, privacy: privacy, - logger: cfg.Logger, + logger: logger, } } diff --git a/internal/ai/analyzer_test.go b/internal/ai/analyzer_test.go index 9a2af90..119c5e8 100644 --- a/internal/ai/analyzer_test.go +++ b/internal/ai/analyzer_test.go @@ -76,6 +76,22 @@ func TestAnalyzerHappyPath(t *testing.T) { } } +func TestAnalyzerUsesDiscardLoggerWhenNil(t *testing.T) { + prov := &scriptedProvider{text: `{"summary":"ok"}`} + + a := NewAnalyzer(AnalyzerConfig{Provider: prov}) + if a.logger == nil { + t.Fatal("logger should default when omitted") + } + resp, err := a.Analyze(context.Background(), doctor.AnalysisRequest{Signals: emptySignals()}) + if err != nil { + t.Fatalf("Analyze error: %v", err) + } + if resp.Summary != "ok" { + t.Errorf("Summary = %q, want ok", resp.Summary) + } +} + func TestAnalyzerMarkdownFencedJSON(t *testing.T) { prov := &scriptedProvider{text: "Here you go:\n```json\n{\"summary\":\"ok\"}\n```\n"}