fix(api): GlobalExceptionMiddleware 补异常日志,便于排查静默 500

原实现 catch 异常后只返回通用错误信封,不记任何日志,
导致请求 500 时无法定位根因。补 LogError 记录异常详情+请求路径。
This commit is contained in:
xiangning 2026-07-17 16:24:18 +08:00
parent caf3c17fce
commit 4f23e76231

View File

@ -3,6 +3,8 @@ using System.Text;
using System.Text.Json; using System.Text.Json;
using FluentValidation; using FluentValidation;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using BuildFlow.Shared.Domain.Errors; using BuildFlow.Shared.Domain.Errors;
using BuildFlow.Shared.Domain.Exceptions; using BuildFlow.Shared.Domain.Exceptions;
@ -37,6 +39,9 @@ public sealed class GlobalExceptionMiddleware(RequestDelegate next)
{ {
// 若响应头已发出(如流式输出已写出一部分字节),无法再改写状态码,只能丢弃 // 若响应头已发出(如流式输出已写出一部分字节),无法再改写状态码,只能丢弃
if (context.Response.HasStarted) return; if (context.Response.HasStarted) return;
// 记录异常详情:原实现静默吞掉异常导致 500 无法排查,此处补日志
var logger = context.RequestServices.GetService<ILogger<GlobalExceptionMiddleware>>();
logger?.LogError(ex, "未处理异常: {Path} {Method}", context.Request.Path, context.Request.Method);
await HandleExceptionAsync(context, ex); await HandleExceptionAsync(context, ex);
} }
} }