I have an application with high incoming requests in each millisecond. for measuring the response time of requests, I use ActionFilter. but it seems to me, it takes a lot time to get to EndRequest in OnActionExecuted after doing previous businesses.
this is the ActionFilter code:
public class LoggerActionFilter : IActionFilter
{
private readonly ILogger<LoggerActionFilter> _logger;
public LoggerActionFilter(ILogger<LoggerActionFilter> logger, IRequestContext
requestContext)
{
_logger = logger;
}
public void OnActionExecuted(ActionExecutedContext context)
{
var request = context.HttpContext.Request;
var response = context.HttpContext.Response;
var info = new
{
timeTaken = GetTimeTaken().TotalMilliseconds,
contentType = request.ContentType,
status = response.StatusCode,
url = request.Path.Value,
body = context.Result
};
_logger.LogDebug(LogEvents.EndRequest, "{@info}", info);
StopWatch();
}
public void OnActionExecuting(ActionExecutingContext context)
{
StartWatch();
var request = context.HttpContext.Request;
var info = new
{
contentType = request.ContentType,
url = request.Path.Value,
method = request.Method,
body = context.ActionDescriptor?.Parameters?.ToDictionary(x => x.Name, x =>
context.ActionArguments[x.Name])
};
_logger.LogDebug(LogEvents.StartRequest, "{@info}", info);
}
}
because ActionFilter is sync,the response time is high after requests getting to OnActionExecuted?