Supervisor S-0c: Log Viewer im Terminal (JSONL menschenlesbar, CID-Forensik)
Terminal-Fenster jetzt mit TabControl (via Designer): Tab 'Live' = bisherige Anzeige,
Tab 'Log Viewer' = JSONL-Tagesdateien menschenlesbar aufbereitet:
- Filter: Datum (DateTimePicker), Level, CorrelationId (SignalId), Suchtext.
- Doppelklick auf eine CID laedt die komplette Signal-Kette ('zeig mir alles zu diesem Signal').
- LogJson.ParseLine (pur, Gegenstueck zu Format): tolerant gegen kaputte Zeilen (null statt Crash);
Viewer ueberspringt sie. UI-Schutz bei sehr grossen Tagen (20k-Limit).
Tests: +5 (Parse-Roundtrip, kaputte Zeilen). Build 0 Fehler, 341 Tests gruen, --smoke-ui komplett gruen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
bf3e012f8b
commit
ca00977ea3
@@ -47,6 +47,32 @@ namespace PolyTraderSharp.Services
|
||||
DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>Geparste JSONL-Zeile für den Log Viewer.</summary>
|
||||
public sealed record ParsedLogLine(string Time, string Level, string Cid, string Message);
|
||||
|
||||
/// <summary>
|
||||
/// Parst eine JSONL-Zeile (Gegenstück zu <see cref="Format"/>). Liefert null bei leeren/
|
||||
/// beschädigten Zeilen (der Viewer überspringt sie, statt zu brechen).
|
||||
/// </summary>
|
||||
public static ParsedLogLine? ParseLine(string line)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(line)) return null;
|
||||
try
|
||||
{
|
||||
using var doc = System.Text.Json.JsonDocument.Parse(line);
|
||||
var root = doc.RootElement;
|
||||
string ts = root.TryGetProperty("ts", out var t) ? t.GetString() ?? "" : "";
|
||||
string level = root.TryGetProperty("level", out var l) ? l.GetString() ?? "" : "";
|
||||
string cid = root.TryGetProperty("cid", out var c) ? c.GetString() ?? "" : "";
|
||||
string msg = root.TryGetProperty("msg", out var m) ? m.GetString() ?? "" : "";
|
||||
return new ParsedLogLine(ts, level, cid, msg);
|
||||
}
|
||||
catch (System.Text.Json.JsonException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class TerminalLogger
|
||||
|
||||
Reference in New Issue
Block a user