Amazon.Lambda.AspNetCoreServer.Hosting: Response size logging (middleware) doesn't work in Lambda, but works from CLI
- Vorherrschende Sprache
- C#
- Sterne
- 1.7k
- Forks
- 503
- Ø Merge
- 1 T. 18 Std.
- Gemergte PRs (30 T.)
- 21
Beschreibung
### Describe the bug
Not sure if this a bug or feature request, but how can I log all response sizes?
We currently use serilog request logging middleware: https://github.com/serilog/serilog-aspnetcore?tab=readme-ov-file#request-logging
And for our asp.net code that runs in fargate, this has worked fine to capture the response size, and ensure it gets saved for serilog:
```
public class MySizeLoggingMiddleware
{
private readonly RequestDelegate _next;
private readonly Serilog.IDiagnosticContext diagnosticContext;
public MySizeLoggingMiddleware(RequestDelegate next, Serilog.IDiagnosticContext diagnosticContext)
{
_next = next;
this.diagnosticContext = diagnosticContext;
}
public async Task InvokeAsync(HttpContext context)
{
if (context.Response.HasStarted) {
throw new Exception("Cannot buffer response, it has already started");
}
var originalStream = context.Response.Body;
using var bufferedStream = new MemoryStream();
context.Response.Body = bufferedStream;
try {
await _next(context);
} catch (Exception) {
Log.Warning("Exception was thrown, resetting body (developer exception page might write to it)");
context.Response.Body = originalStream;
throw;
}
// Get the buffered content size, and save it for serilog request logging
long contentSize = bufferedStream.Length;
diagnosticContext.Set("ResponseSize", contentSize);
context.Response.Body = originalStream;
bufferedStream.Seek(0, SeekOrigin.Begin);
await bufferedStream.CopyToAsync(originalStream);
}
}
```
However when using `Amazon.Lambda.AspNetCoreServer.Hosting`, inside Lambda, the size is always reported & logged as 0, meaning nothing is actually writing to the memory stream I'm creating. The same codebase works fine when run using `dotnet run`.
### Regression Issue
- [ ] Select this option if this issue appears to be a regression.
### Expected Behavior
.
### Current Behavior
.
### Reproduction Steps
.
### Possible Solution
_No response_
### Additional Information/Context
_No response_
### AWS .NET SDK and/or Package version used
Amazon.Lambda.AspNetCoreServer.Hosting
### Targeted .NET Platform
.net 8
### Operating System and version
lambda
Beitragsleitfaden
Rechercherichtung
Reproduziere die Middleware zur Protokollierung der Antwortgröße mit Amazon.Lambda.AspNetCoreServer.Hosting unter .NET 8 in Lambda und vergleiche ihre Behandlung des Antwort-Bodys mit demselben Code unter dotnet run. Die Aufgabe ist erledigt, wenn die Middleware eine Antwortgröße ungleich null erfasst und Serilog sie auch in Lambda protokolliert.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- aws, csharp
- Bereich
- backend, cloud
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 30/100