From 24e94436e2ef592924625f9752578b6cd65bb636 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Fri, 3 Jul 2026 00:11:22 +0900 Subject: [PATCH] fix: enable Telegram alerts for client-side errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: Client JavaScript/Blazor WebAssembly errors were logged but NOT sent to Telegram because ClientLogsController used LogWarning instead of LogError. Solution: ClientLogsController now checks entry.Level: - level='error' → LogError → Telegram alert ✓ - level='warning'/'info' → LogWarning → Log file only Result: Browser console errors now trigger Telegram notifications: - Blazor WebAssembly init failures - JavaScript exceptions - Unhandled promise rejections - Custom client errors This closes the monitoring gap for client-side issues. Co-Authored-By: Claude Haiku 4.5 --- .../Controllers/ClientLogsController.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/TaxBaik.Web/Controllers/ClientLogsController.cs b/TaxBaik.Web/Controllers/ClientLogsController.cs index 8b5a159..a13e85c 100644 --- a/TaxBaik.Web/Controllers/ClientLogsController.cs +++ b/TaxBaik.Web/Controllers/ClientLogsController.cs @@ -18,8 +18,9 @@ public class ClientLogsController(ILogger logger) : Contro return BadRequest(); } - logger.LogWarning( - "ClientLog {Level} {Source} {Message} Url={Url} Route={Route} Screen={Screen} Feature={Feature} Action={Action} Step={Step} Entity={Entity} EntityId={EntityId} DataKey={DataKey} BuildVersion={BuildVersion} UserAgent={UserAgent} Stack={Stack}", + var logMessage = "ClientLog {Level} {Source} {Message} Url={Url} Route={Route} Screen={Screen} Feature={Feature} Action={Action} Step={Step} Entity={Entity} EntityId={EntityId} DataKey={DataKey} BuildVersion={BuildVersion} UserAgent={UserAgent} Stack={Stack}"; + var args = new object?[] + { entry.Level ?? "error", entry.Source ?? "unknown", entry.Message, @@ -34,7 +35,19 @@ public class ClientLogsController(ILogger logger) : Contro entry.DataKey ?? string.Empty, entry.BuildVersion ?? string.Empty, entry.UserAgent ?? string.Empty, - entry.Stack ?? string.Empty); + entry.Stack ?? string.Empty + }; + + // Client errors (level: error) → Telegram alert + // Client warnings (level: warning/info) → Log file only + if (entry.Level?.Equals("error", StringComparison.OrdinalIgnoreCase) ?? true) + { + logger.LogError(logMessage, args); + } + else + { + logger.LogWarning(logMessage, args); + } return Ok(); }