продолжительность действия контроллера лога в ядре ASP.NET - PullRequest
0 голосов
/ 07 декабря 2018

Для требования нам нужно записать продолжительность запросов ядра Aspnet.В конце запроса продолжительность должна быть зарегистрирована (секундомер), и мы также должны знать, какой контроллер и какой метод действия использовались.

Как лучше всего это сделать?Фильтр действий, промежуточное ПО?И как?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

ASP.NET Core уже собирает эту информацию.Вам просто нужно убедиться, что он зарегистрирован, в общем, и где вы хотите, чтобы это было.В разработке они отправляются на консоль.Если вы посмотрите это, вы увидите журналы, такие как:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
    Request starting HTTP/1.1 GET http://localhost:44301/
...
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
    Route matched with {action = "Index", controller = "Home"}. Executing action MyApp.HomeController.Index (MyApp)
...
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
    Request finished in 7.981ms 200 text/html; charset=utf-8

Основные категории, которые вас заинтересуют: Microsoft.AspNetCore.Hosting и Microsoft.AspNetCore.Mvc, которые оба регистрируются на уровне Information.При работе в рабочей среде уровень журнала по умолчанию - Warning, поэтому вы не регистрируете его там.Вы можете просто добавить что-то в свой appsettings.Production.json файл, например:

"Logging": {
  "LogLevel": {
    "Microsoft.AspNetCore.Hosting": "Information",
    "Microsoft.AspNetCore.Mvc": "Information"
  }
}

. Или вы можете указать ведение журнала только для определенного поставщика:

"Serilog": {
  "LogLevel": {
    "Microsoft.AspNetCore.Hosting": "Information",
    "Microsoft.AspNetCore.Mvc": "Information"
  }
}

.этот.См. документы по фильтрации журналов для получения дополнительной информации.

0 голосов
/ 07 декабря 2018

Если вы хотите записать прошедшее время контроллера / действия.Вы можете написать свой Middleware для этой цели.проверьте пример ниже:

public class DiagnosticsMiddleware 
{
    private readonly RequestDelegate _next;

    public DiagnosticsMiddleware(RequestDelegate next)
    {
        _next = next;
        _esClient = esClient;
    }

    public async Task Invoke(HttpContext context)
    { 
        Stopwatch sw = Stopwatch.StartNew();


        await _next(context);

        sw.Stop();
        var elapsedTime = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L));
        LogContext.PushProperty("ElapsedTime", elapsedTime);
    }

}

, и вы можете настроить его как

public void Configure(IApplicationBuilder app)
{
    app.UseMiddleware<ContextEnricherMiddleware>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...