首页 > 解决方案 > .NET Core 自定义 ILogger 中间件以捕获长时间运行的请求

问题描述

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

Information: Request finished in 154.0077ms 200 application/json

我需要记录任何花费超过n ms 的请求作为警告而不是信息,以便在生产中可以将默认日志级别设置为警告,并且仍然会捕获这些慢速请求

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

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;
    }
}

我怀疑有一种比上述方法更简单的方法,但我无法弄清楚并且似乎无法在网上找到任何建议。感激地收到任何帮助。

标签: asp.net-core.net-core

解决方案


推荐阅读