„Die Einzelheiten stehen im Protokoll von heute" — standen sie nicht

Der Spieler verweist bei einer gescheiterten Wiedergabe aufs
Tagesprotokoll. Dort stand nichts: `ILogger` landet in den
Container-Ausgaben, und das Tagebuch ist eine eigene Datei, in die nur
Scan, Wartung und unbehandelte Ausnahmen schreiben. Der Hinweis war eine
Sackgasse — gemessen an einem Protokoll, das einen ganzen Tag Betrieb mit
vier Zeilen Start und Ende wiedergab, während eine Wiedergabe mit 500
abgebrochen war.

Jetzt geht der ffmpeg-Fehler auch dorthin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-10 19:51:41 +02:00
co-authored by Claude Opus 5
parent 6ef84b47cf
commit 34ade18ed6
+10
View File
@@ -63,6 +63,7 @@ public sealed class Streamkoordinator(
FfmpegOptions ffmpeg, FfmpegOptions ffmpeg,
Schluesselbilder schluesselbilder, Schluesselbilder schluesselbilder,
TimeProvider clock, TimeProvider clock,
Tagebuch tagebuch,
ILogger<Streamkoordinator> log) : IDisposable ILogger<Streamkoordinator> log) : IDisposable
{ {
private readonly ConcurrentDictionary<Guid, Eintrag> _sitzungen = new(); private readonly ConcurrentDictionary<Guid, Eintrag> _sitzungen = new();
@@ -323,6 +324,15 @@ public sealed class Streamkoordinator(
sitzung.Fehler = text.Trim(); sitzung.Fehler = text.Trim();
log.LogWarning("Strom {Kennung}: ffmpeg endete mit {Code}: {Fehler}", log.LogWarning("Strom {Kennung}: ffmpeg endete mit {Code}: {Fehler}",
sitzung.Kennung, prozess.ExitCode, sitzung.Fehler); sitzung.Kennung, prozess.ExitCode, sitzung.Fehler);
// **Auch ins Tagesprotokoll, nicht nur in die Konsole.** Die
// Fehlermeldung im Spieler verweist aufs Protokoll von heute —
// und dort stand nichts, weil `ILogger` in den Container-Ausgaben
// landet und das Tagebuch eine eigene Datei ist. Der Hinweis war
// damit eine Sackgasse.
tagebuch.Schreiben(
$"Wiedergabe gescheitert: ffmpeg endete mit {prozess.ExitCode}. {sitzung.Fehler}",
Tagebuch.Art.Fehler);
}); });
_ = Task.Run(() => prozess.StandardOutput.ReadToEndAsync()); _ = Task.Run(() => prozess.StandardOutput.ReadToEndAsync());