From 0adf66dae1404a3aed28a84d5ef0807dbf3a14a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 26 May 2026 17:25:37 +0000 Subject: [PATCH] Centralize remaining ILogger log statements in infrastructure and web --- .../Squidex.Infrastructure/Commands/Rebuilder.cs | 2 +- .../src/Squidex.Infrastructure/LogMessages.cs | 3 +++ .../UsageTracking/BackgroundUsageTracker.cs | 2 +- .../Squidex.Web/ApiExceptionFilterAttribute.cs | 2 +- backend/src/Squidex.Web/LogMessages.cs | 16 ++++++++++++++++ .../src/Squidex.Web/Pipeline/ApiKeyHandler.cs | 2 +- backend/src/Squidex.Web/Pipeline/AppResolver.cs | 12 ++++++++---- backend/src/Squidex.Web/Pipeline/TeamResolver.cs | 10 ++++++++-- 8 files changed, 39 insertions(+), 10 deletions(-) diff --git a/backend/src/Squidex.Infrastructure/Commands/Rebuilder.cs b/backend/src/Squidex.Infrastructure/Commands/Rebuilder.cs index 93dbb7657..b212d7f39 100644 --- a/backend/src/Squidex.Infrastructure/Commands/Rebuilder.cs +++ b/backend/src/Squidex.Infrastructure/Commands/Rebuilder.cs @@ -105,7 +105,7 @@ public class Rebuilder( } catch (Exception ex) { - log.LogWarning(ex, "Found corrupt domain object of type {type} with ID {id}.", typeof(T), id); + LogMessages.LogFoundCorruptDomainObject(log, typeof(T), id, ex); Interlocked.Increment(ref handlerErrors); } } diff --git a/backend/src/Squidex.Infrastructure/LogMessages.cs b/backend/src/Squidex.Infrastructure/LogMessages.cs index 0577f22f3..9a5d0bb09 100644 --- a/backend/src/Squidex.Infrastructure/LogMessages.cs +++ b/backend/src/Squidex.Infrastructure/LogMessages.cs @@ -58,4 +58,7 @@ internal static partial class LogMessages [LoggerMessage(Level = LogLevel.Error, Message = "Failed to repair snapshot for domain object of type {type} with ID {id}.")] public static partial void LogFailedToRepairDomainObjectSnapshot(ILogger logger, Type type, DomainId id, Exception exception); + + [LoggerMessage(Level = LogLevel.Warning, Message = "Found corrupt domain object of type {type} with ID {id}.")] + public static partial void LogFoundCorruptDomainObject(ILogger logger, Type type, DomainId id, Exception exception); } diff --git a/backend/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs b/backend/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs index 5adefecc2..621972e88 100644 --- a/backend/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs +++ b/backend/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs @@ -82,7 +82,7 @@ public sealed class BackgroundUsageTracker : DisposableObjectBase, IUsageTracker } catch (Exception ex) { - log.LogError(ex, "Failed to track usage in background."); + LogMessages.LogTrackUsageFailed(log, ex); } finally { diff --git a/backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs b/backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs index 4572d907b..d66e32d31 100644 --- a/backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs +++ b/backend/src/Squidex.Web/ApiExceptionFilterAttribute.cs @@ -34,7 +34,7 @@ public sealed class ApiExceptionFilterAttribute : ActionFilterAttribute, IExcept { var log = context.HttpContext.RequestServices.GetRequiredService>(); - log.LogError(unhandled, "An unexpected exception has occurred."); + LogMessages.LogUnexpectedException(log, unhandled); } context.Result = GetResult(error); diff --git a/backend/src/Squidex.Web/LogMessages.cs b/backend/src/Squidex.Web/LogMessages.cs index 960ad47e2..f746eb421 100644 --- a/backend/src/Squidex.Web/LogMessages.cs +++ b/backend/src/Squidex.Web/LogMessages.cs @@ -6,6 +6,7 @@ // ========================================================================== using Microsoft.Extensions.Logging; +using Squidex.Infrastructure; namespace Squidex.Web; @@ -16,4 +17,19 @@ internal static partial class LogMessages [LoggerMessage(Level = LogLevel.Critical, Message = "Failed to send result.")] public static partial void LogFailedToSendResult(ILogger logger, Exception exception); + + [LoggerMessage(Level = LogLevel.Warning, Message = "Cannot find app with the given name {name}.")] + public static partial void LogCannotFindAppByName(ILogger logger, string name); + + [LoggerMessage(Level = LogLevel.Warning, Message = "Authenticated user has no permission to access the app {name} with ID {id}.")] + public static partial void LogNoPermissionToAccessApp(ILogger logger, DomainId id, string name); + + [LoggerMessage(Level = LogLevel.Warning, Message = "Cannot find team with the given id {id}.")] + public static partial void LogCannotFindTeamById(ILogger logger, string id); + + [LoggerMessage(Level = LogLevel.Warning, Message = "Authenticated user has no permission to access the team with ID {id}.")] + public static partial void LogNoPermissionToAccessTeam(ILogger logger, DomainId id); + + [LoggerMessage(Level = LogLevel.Error, Message = "Error while handling api key.")] + public static partial void LogErrorHandlingApiKey(ILogger logger, Exception exception); } diff --git a/backend/src/Squidex.Web/Pipeline/ApiKeyHandler.cs b/backend/src/Squidex.Web/Pipeline/ApiKeyHandler.cs index dfc6ffc80..a3ebb6b5b 100644 --- a/backend/src/Squidex.Web/Pipeline/ApiKeyHandler.cs +++ b/backend/src/Squidex.Web/Pipeline/ApiKeyHandler.cs @@ -75,7 +75,7 @@ public sealed class ApiKeyHandler( } catch (Exception ex) { - Logger.LogError(ex, "Error while handling api key."); + LogMessages.LogErrorHandlingApiKey(Logger, ex); throw; } diff --git a/backend/src/Squidex.Web/Pipeline/AppResolver.cs b/backend/src/Squidex.Web/Pipeline/AppResolver.cs index 0c4f43281..ec73dbdcc 100644 --- a/backend/src/Squidex.Web/Pipeline/AppResolver.cs +++ b/backend/src/Squidex.Web/Pipeline/AppResolver.cs @@ -41,7 +41,10 @@ public sealed class AppResolver(IAppProvider appProvider) : IAsyncActionFilter { var log = context.HttpContext.RequestServices?.GetService>(); - log?.LogWarning("Cannot find app with the given name {name}.", appName); + if (log != null) + { + LogMessages.LogCannotFindAppByName(log, appName); + } context.Result = new NotFoundResult(); return; @@ -97,9 +100,10 @@ public sealed class AppResolver(IAppProvider appProvider) : IAsyncActionFilter { var log = context.HttpContext.RequestServices?.GetService>(); - log?.LogWarning("Authenticated user has no permission to access the app {name} with ID {id}.", - app.Id, - app.Name); + if (log != null) + { + LogMessages.LogNoPermissionToAccessApp(log, app.Id, app.Name); + } context.Result = new NotFoundResult(); } diff --git a/backend/src/Squidex.Web/Pipeline/TeamResolver.cs b/backend/src/Squidex.Web/Pipeline/TeamResolver.cs index 81ac7dc16..bc517a5fb 100644 --- a/backend/src/Squidex.Web/Pipeline/TeamResolver.cs +++ b/backend/src/Squidex.Web/Pipeline/TeamResolver.cs @@ -41,7 +41,10 @@ public sealed class TeamResolver(IAppProvider appProvider) : IAsyncActionFilter { var log = context.HttpContext.RequestServices?.GetService>(); - log?.LogWarning("Cannot find team with the given id {id}.", teamId); + if (log != null) + { + LogMessages.LogCannotFindTeamById(log, teamId); + } context.Result = new NotFoundResult(); return; @@ -69,7 +72,10 @@ public sealed class TeamResolver(IAppProvider appProvider) : IAsyncActionFilter { var log = context.HttpContext.RequestServices?.GetService>(); - log?.LogWarning("Authenticated user has no permission to access the team with ID {id}.", team.Id); + if (log != null) + { + LogMessages.LogNoPermissionToAccessTeam(log, team.Id); + } context.Result = new NotFoundResult(); }