Skip to content

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

Description

@kjpgit

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue is a bug.p2This is a standard priority issuequeued

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions