当前位置:首页 > C# > 正文

打造高效可追溯的Web应用(ASP.NET Core请求日志中间件开发完全指南)

在现代Web开发中,ASP.NET Core请求日志中间件是保障系统可观测性、排查问题和监控性能的重要工具。无论你是刚入门的开发者,还是有一定经验的工程师,掌握如何自定义请求日志中间件都将极大提升你的应用健壮性。

打造高效可追溯的Web应用(ASP.NET Core请求日志中间件开发完全指南) ASP.NET Core请求日志中间件  .NET Core日志记录 中间件开发教程 Web API请求日志 第1张

为什么需要请求日志中间件?

默认情况下,ASP.NET Core 提供了基础的日志功能,但它不会自动记录每个 HTTP 请求的详细信息(如请求路径、方法、耗时、响应状态码等)。通过自定义.NET Core日志记录中间件,我们可以:

  • 追踪每个请求的完整生命周期
  • 分析 API 性能瓶颈
  • 快速定位异常请求
  • 满足审计与合规需求

创建自定义请求日志中间件

下面我们将一步步教你如何从零开始编写一个简单但实用的请求日志中间件。

第1步:新建中间件类

在你的 ASP.NET Core 项目中,创建一个新文件 RequestLoggingMiddleware.cs

using Microsoft.AspNetCore.Http;using Microsoft.Extensions.Logging;using System.Diagnostics;using System.Threading.Tasks;namespace YourApp.Middleware{    public class RequestLoggingMiddleware    {        private readonly RequestDelegate _next;        private readonly ILogger<RequestLoggingMiddleware> _logger;        public RequestLoggingMiddleware(RequestDelegate next, ILogger<RequestLoggingMiddleware> logger)        {            _next = next;            _logger = logger;        }        public async Task InvokeAsync(HttpContext context)        {            var stopwatch = Stopwatch.StartNew();            var method = context.Request.Method;            var path = context.Request.Path;            try            {                await _next(context);                _logger.LogInformation(                    "[{Method}] {Path} => {StatusCode} ({ElapsedMs} ms)",                    method, path, context.Response.StatusCode, stopwatch.ElapsedMilliseconds);            }            catch (System.Exception ex)            {                _logger.LogError(ex,                    "[{Method}] {Path} => {StatusCode} ({ElapsedMs} ms) ERROR: {ErrorMessage}",                    method, path, context.Response.StatusCode, stopwatch.ElapsedMilliseconds, ex.Message);                throw;            }        }    }}

第2步:注册中间件

打开 Program.cs(.NET 6+)或 Startup.cs,将中间件添加到请求管道中:

// 在 Program.cs 中(.NET 6 及以上版本)var builder = WebApplication.CreateBuilder(args);// 添加服务...builder.Services.AddControllers();var app = builder.Build();// 注意:中间件顺序很重要!// 日志中间件应放在 UseRouting() 之后、UseEndpoints() 之前app.UseRouting();// 注册我们的请求日志中间件app.UseMiddleware<YourApp.Middleware.RequestLoggingMiddleware>();app.MapControllers();app.Run();

中间件开发教程要点总结

这个简单的中间件开发教程展示了如何捕获请求方法、路径、响应状态码和处理时间。你还可以进一步扩展它,例如:

  • 记录请求/响应体(注意敏感信息过滤)
  • 添加唯一请求 ID 用于链路追踪
  • 根据环境(开发/生产)调整日志级别

实际效果与日志输出

运行应用后,每次访问 API 都会在控制台或日志文件中看到类似这样的输出:

info: YourApp.Middleware.RequestLoggingMiddleware[0]      [GET] /api/users => 200 (45 ms)

这种结构化的日志格式非常适合后续使用 ELK(Elasticsearch, Logstash, Kibana)或 Seq 等工具进行聚合分析,实现强大的Web API请求日志监控能力。

结语

通过本教程,你已经掌握了在 ASP.NET Core 中实现请求日志中间件的核心方法。这不仅提升了应用的可观测性,也为后续的性能优化和故障排查打下了坚实基础。赶快在你的项目中试试吧!