AddMiddlewareAnalysis does not detect custom middleware
- 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

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
Assessment
This issue has not been assessed yet.