diff --git a/hanatui/publish/hanatui b/hanatui/publish/hanatui index 92e41bb..50b0eaf 100755 Binary files a/hanatui/publish/hanatui and b/hanatui/publish/hanatui differ diff --git a/hanatui/src/Tui/Components/LogPanel.cs b/hanatui/src/Tui/Components/LogPanel.cs index e2202eb..2569e78 100644 --- a/hanatui/src/Tui/Components/LogPanel.cs +++ b/hanatui/src/Tui/Components/LogPanel.cs @@ -64,20 +64,22 @@ public sealed class LogPanel foreach (var entry in snapshot) { var timeStr = entry.Time.ToString("HH:mm:ss"); - var (tag, color) = entry.Level switch + var (tagLabel, color) = entry.Level switch { - LogLevel.Sql => ("[SQL ]", "blue"), - LogLevel.Done => ("[DONE]", "green"), - LogLevel.Warn => ("[WARN]", "yellow"), - LogLevel.Error => ("[ERR ]", "red"), - _ => ("[INFO]", "grey"), + LogLevel.Sql => ("SQL ", "blue"), + LogLevel.Done => ("DONE", "green"), + LogLevel.Warn => ("WARN", "yellow"), + LogLevel.Error => ("ERR ", "red"), + _ => ("INFO", "grey"), }; - // Escape any markup-like content in the raw text - var safeText = Markup.Escape(entry.Text); + // Strip the leading [TAG] prefix from the raw text if present, + // since we re-render it with color. Then escape the remainder. + var rawText = StripKnownPrefix(entry.Text); + var safeText = Markup.Escape(rawText); rows.AddRow(new Markup( - $"[dim]{timeStr}[/] [{color}]{tag}[/] {safeText}")); + $"[dim]{timeStr}[/] [{color}][[{tagLabel}]][/] {safeText}")); } return new Panel(rows) @@ -96,8 +98,21 @@ public sealed class LogPanel return LogLevel.Done; if (text.Contains("[WARN]")) return LogLevel.Warn; - if (text.Contains("[ERROR]") || text.Contains("[ERR]")) + if (text.Contains("[ERROR]") || text.Contains("[ERR]") || text.Contains("[ERR ]")) return LogLevel.Error; return LogLevel.Info; } + + private static readonly string[] KnownPrefixes = + ["[INFO] ", "[SQL ] ", "[SQL] ", "[DONE] ", "[WARN] ", "[ERROR] ", "[ERR ] ", "[ERR] "]; + + private static string StripKnownPrefix(string text) + { + foreach (var prefix in KnownPrefixes) + { + if (text.StartsWith(prefix, StringComparison.Ordinal)) + return text[prefix.Length..]; + } + return text; + } }