// backend/log_policy.go package main import ( "context" "errors" "os" "strings" ) // Optional: Verbose nur wenn du es explizit willst (z.B. beim Debuggen) func verboseLogs() bool { return os.Getenv("REC_VERBOSE") == "1" } func shouldLogRecordError(err error, provider string, req RecordRequest) bool { if err == nil { return false } // "STOP" / Cancel ist normal -> kein Fehlerlog if errors.Is(err, context.Canceled) { return false } msg := strings.ToLower(err.Error()) // --- Chaturbate: Cookie/Auth/CF-Probleme IMMER loggen (auch bei Hidden) --- if provider == "chaturbate" { // deine explizite Cookie-Fehlermeldung if strings.Contains(msg, "cf_clearance") && strings.Contains(msg, "cookie") { return true } // typische Auth/CF/Blocker-Indikatoren if strings.Contains(msg, "403") || strings.Contains(msg, "401") || strings.Contains(msg, "cloudflare") || strings.Contains(msg, "cf") || strings.Contains(msg, "captcha") || strings.Contains(msg, "forbidden") { return true } } // --- harte Config/IO-Fehler (immer loggen) --- if strings.Contains(msg, "recorddir") || strings.Contains(msg, "auflösung fehlgeschlagen") || strings.Contains(msg, "permission") || strings.Contains(msg, "access is denied") || strings.Contains(msg, "read-only") { return true } // --- erwartbare "Provider/Offline"-Situationen: NIE loggen --- // unsupported provider if strings.Contains(msg, "unsupported provider") { return false } // Chaturbate offline/parse/watch-segments end if strings.Contains(msg, "kein hls") || strings.Contains(msg, "room dossier") || strings.Contains(msg, "keine neuen hls-segmente") || strings.Contains(msg, "playlist nicht mehr erreichbar") || strings.Contains(msg, "möglicherweise offline") || strings.Contains(msg, "stream vermutlich offline") { return false } // MFC: "nicht public"/offline/private/not exist if strings.Contains(msg, "mfc: stream wurde nicht public") || strings.Contains(msg, "mfc: stream ist nicht public") || strings.Contains(msg, "stream ist nicht öffentlich") || strings.Contains(msg, "status: offline") || strings.Contains(msg, "status: private") || strings.Contains(msg, "status: notexist") { return false } // ffmpeg-Fehler: // - bei Hidden (Autostart/Auto-Checks) meist "offline/kurzlebig" => stumm // - bei manuell gestarteten Jobs sinnvoll => loggen if strings.Contains(msg, "ffmpeg") { if req.Hidden { return false } return true } // Default: // - Hidden-Jobs sollen ruhig sein // - manuelle Jobs dürfen Fehler loggen (aber keine "offline"/"expected" s.o.) return !req.Hidden } func shouldLogRecordInfo(req RecordRequest) bool { // Standard: keine Info-Logs (wie auto-deleted), außer du setzt REC_VERBOSE=1 if verboseLogs() { return true } return false }