📝 Log Every Request: Path, Method, Duration, Status
Default logging doesn’t show request duration. Custom middleware logs request/response details. Debug slow endpoints, monitor API usage.
📝 Request Logging Middleware
public class RequestLoggingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public RequestLoggingMiddleware(RequestDelegate next, ILogger logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context)
{
var stopwatch = Stopwatch.StartNew();
// Log request
_logger.LogInformation("Request: {Method} {Path}",
context.Request.Method,
context.Request.Path);
// Capture response
var originalBodyStream = context.Response.Body;
using var responseBody = new MemoryStream();
context.Response.Body = responseBody;
await _next(context);
// Log response
stopwatch.Stop();
_logger.LogInformation("Response: {StatusCode} {Duration}ms",
context.Response.StatusCode,
stopwatch.ElapsedMilliseconds);
await responseBody.CopyToAsync(originalBodyStream);
}
}
🔧 Register Middleware
// Program.cs var app = builder.Build(); app.UseMiddleware(); app.UseRouting(); app.UseEndpoints(...); app.Run();
💡 Advanced Features
- Log request body (POST data)
- Log response body for errors
- Add correlation ID for tracing
- Skip logging for health check endpoints
- Log to Application Insights or Seq
“Slow API? Added request logging middleware. Found endpoint taking 5 seconds. Optimized database query. Now 200ms. Logging saved performance.”
