using Microsoft.Extensions.Logging; namespace CMSMicroservice.Application.Common.Behaviours; public class UnhandledExceptionBehaviour : IPipelineBehavior where TRequest : IRequest { private readonly ILogger _logger; public UnhandledExceptionBehaviour(ILogger logger) { _logger = logger; } public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) { try { return await next(); } catch (Exception ex) { var requestName = typeof(TRequest).Name; var safeLog = request?.ToString() ?? ""; if (safeLog.Length > 2000) safeLog = safeLog[..2000] + "... [TRUNCATED]"; _logger.LogError(ex, "Request: Unhandled Exception for Request {Name} {Request}", requestName, safeLog); throw; } } }