-
Notifications
You must be signed in to change notification settings - Fork 209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add EnrichDiagnosticContextAsync to allow async calls #346
base: dev
Are you sure you want to change the base?
Conversation
…completion If you want to add properties to the diagnostic context that require async calls (e.g. reading request body), EnrichDiagnosticContextAsync allows to hand over your own async method.
Thanks for sending this! I think this feature would be find if it cleanly slotted in, but as you found in the implementation, it's not completely equivalent to the existing The Just zooming out, the alternative implementation of this scenario might look like: class RequestBodyEnrichmentMiddleware(RequestDelegate next, IDiagnosticContext diagnosticContext)
{
public async Task InvokeAsync(HttpContext context)
{
await EnrichFromRequestAsync(context.Request);
await next(context);
}
async Task EnrichFromRequestAsync(HttpRequest request)
{
// diagnosticContext.Set(...)
}
} Perhaps giving that example in the README would go far enough? |
…also in case of an exception thrown before
Nicholas, thank you for your valuable feedback. I totally get your point. The reason I think this is still a good place to integrate is that you already have some good features like "GetLevel" in here and it's just a good match to have the logging information at one point. I've changed the implementation to behave like the sync call. It's always called in finally block (and makes sure it doesn't create new Exceptions, just like the second call of "LogCompletion" in the exception filter clause). It's also taking the information if the method should be called based on GetLevel and current log level. I'll check why two tests fail (it seems I've introduced a bug between my last tests and commiting the solution) and update the PR then. The bug is fixed. In case an exception occured in one of the next middlewares or the request the logger was not initialized correctly. |
{ | ||
} | ||
finally | ||
{ | ||
await CallEnrichDiagnosticContextAsync(httpContext, logger, level); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I may be off track, but won't this be called after the LogCompletion
calls in the try
and catch/when
blocks?
I would prefer to moce from |
Is there any movement expected on this? |
#345
If you want to add properties to the diagnostic context that require async calls (e.g. reading request body), EnrichDiagnosticContextAsync allows to hand over your own async method.