aws / aws/aws-lambda-dotnet

Amazon.Lambda.AspNetCoreServer.Hosting: Response size logging (middleware) doesn't work in Lambda, but works from CLI

Aperta
#2,040 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
bug p2 queued
Lingua principale
C#
Stelle
1.7k
Fork
503
Merge medio
1g 13h
PR unite (30g)
19

Descrizione

### 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

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Riproduci il middleware di logging delle dimensioni della risposta con Amazon.Lambda.AspNetCoreServer.Hosting su .NET 8 in Lambda, quindi confronta la gestione del corpo della risposta con lo stesso codice eseguito tramite dotnet run. Il lavoro è completato quando il middleware acquisisce una dimensione della risposta diversa da zero e Serilog la registra anche in Lambda.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
aws, csharp
Ambito
backend, cloud
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
30/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.