dotnet / dotnet/aspnetcore

AddMiddlewareAnalysis does not detect custom middleware

Open
#54,166 1 comment 0 reactions 0 assignees View on GitHub
area-mvc
Dominant language
C#
Stars
38.4k
Forks
10.9k
Avg merge
2d 10h
Merged PRs (30d)
281

Description

### Is there an existing issue for this?

- [X] I have searched the existing issues

### Describe the bug

When creating a listener as per this github middleware analysis [sample](https://github.com/dotnet/aspnetcore/blob/main/src/Middleware/MiddlewareAnalysis/samples/MiddlewareAnalysisSample/Startup.cs)

1. None of the custom middlewares registered using the syntax
![image](https://github.com/dotnet/aspnetcore/assets/130806196/0cfc1689-9f7e-4085-8e44-3962072746cd)

will ever appear in the output of the middleware push pop stack. eg below MyCustomMiddleware never appears in
events starting, stopped, exception

Starting Middleware 'Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+ReflectionMiddlewareBinder+<>c__DisplayClass6_0'
Starting Middleware 'Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+ReflectionMiddlewareBinder+<>c__DisplayClass6_0'
Starting Middleware 'Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+ReflectionMiddlewareBinder+<>c__DisplayClass6_0'
Starting Middleware 'Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+InterfaceMiddlewareBinder+<>c__DisplayClass2_0'
Starting Middleware 'Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware'

2. Middleware naming below ambiguous and no clue what it is about
Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+ReflectionMiddlewareBinder+<>c__DisplayClass6_0
Middleware 'Microsoft.AspNetCore.Builder.UseMiddlewareExtensions+InterfaceMiddlewareBinder+<>c__DisplayClass2_0'

### Expected Behavior

Output must also include custom middleware(s) and not just asp.net core built in middleware.

Additionally clean up the naming with proper description.

### Steps To Reproduce

public void ConfigureServices(IServiceCollection services)
{
services.AddMiddlewareAnalysis();
....
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DiagnosticListener diagnosticListener)
{
// Listen for middleware events and log them to File
MiddlewareDiagnosticListener listener = new MiddlewareDiagnosticListener();
diagnosticListener.SubscribeWithAdapter(listener);

app.UseMiddleware();
...
}

public class MiddlewareDiagnosticListener
{
private static string tempOutFile = @"MiddlewareDiagnostic.txt";

[DiagnosticName("Microsoft.AspNetCore.MiddlewareAnalysis.MiddlewareStarting")]
public void OnMiddlewareStarting(HttpContext httpContext, string name, Guid instanceId, long timestamp)
{
File.AppendAllText(tempOutFile, $"[{instanceId}] Starting Middleware '{name}'" + Environment.NewLine);
}

[DiagnosticName("Microsoft.AspNetCore.MiddlewareAnalysis.MiddlewareException")]
public void OnMiddlewareException(Exception exception, HttpContext httpContext, string name, Guid instanceId, long timestamp, long duration)
{
File.AppendAllText(tempOutFile, $"[{instanceId}] Exception Middleware '{name}' Ex:'{exception.GetType().FullName}' Elapsed(ms): '{new TimeSpan(duration).TotalMilliseconds}'" + Environment.NewLine);
}

[DiagnosticName("Microsoft.AspNetCore.MiddlewareAnalysis.MiddlewareFinished")]
public void OnMiddlewareFinished(HttpContext httpContext, string name, Guid instanceId, long timestamp, long duration)
{
File.AppendAllText(tempOutFile, $"[{instanceId}] Stopped Middleware '{name}'. Elapsed(ms): '{new TimeSpan(duration).TotalMilliseconds}'" + Environment.NewLine);
}
}

### Exceptions (if any)

_No response_

### .NET Version

8.0

### Anything else?

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.