Asp.net core .NET核心自定义ILogger中间件,用于捕获长时间运行的请求

Asp.net core .NET核心自定义ILogger中间件,用于捕获长时间运行的请求,asp.net-core,.net-core,Asp.net Core,.net Core,我正在慢慢地学习.NETCore,并努力了解日志中间件。我已经编写了一个自定义ILogger,它可以注销到一个文本文件。默认情况下,.NET core将记录有关每个请求所用时间长度的信息,例如: Information: Request finished in 154.0077ms 200 application/json 我有一个要求,将任何需要超过n毫秒的请求记录为警告,而不是信息,以便在生产中可以将默认日志级别设置为警告,并且仍然可以捕获这些缓慢的请求 目前,我正在做以下工作,这是可行的

我正在慢慢地学习.NETCore,并努力了解日志中间件。我已经编写了一个自定义ILogger,它可以注销到一个文本文件。默认情况下,.NET core将记录有关每个请求所用时间长度的信息,例如:

Information: Request finished in 154.0077ms 200 application/json
我有一个要求,将任何需要超过n毫秒的请求记录为警告,而不是信息,以便在生产中可以将默认日志级别设置为警告,并且仍然可以捕获这些缓慢的请求

目前,我正在做以下工作,这是可行的,但前提是默认日志级别设置为Information(我不希望在生产中使用)。显然,将默认值更改为警告意味着“请求完成”数据甚至不会传递给记录器

Regex requestFinished = new Regex(@"(.*\s)([0-9]{1,}[.]?[0-9]{1,})([m]?s)");
Match match = requestFinished.Match(message);

if (match.Success)
{
    double timeTaken = 0;
    Double.TryParse(match.Groups[2].ToString(), out timeTaken);

    if (timeTaken > MyService.ExecutionThreshold)
    {
         logLevel = LogLevel.Warning;
    }
}

我怀疑有一种比上述方法简单得多的方法可以做到这一点,但我想不出来,而且似乎在网上找不到任何建议。感谢您的帮助。

为什么不使用类似的探查器?您是否研究过如何使用应用程序洞察?谢谢,我将探讨这些选项