Как регистрировать каждый метод Время выполнения и параметры на .Net Web Api - PullRequest
0 голосов
/ 26 октября 2019

Иногда мы сталкиваемся с проблемами производительности веб-приложения (.NET Web Api2), и каждый раз, когда пользователь сообщает о проблеме с производительностью, нам необходимо отлаживать приложение, чтобы знать, что происходит, и какой метод занимает больше времени.

Существует ли лучший способ справиться с этим, регистрируя все вызовы методов, включая время и его параметры по требованию, чтобы при медленном включении мы могли включить его и получить журналы, которые можно увидеть вместо отладки приложения.

Это не только метод контроллера, все методы в вызове, которые мне нравится регистрировать.

Спасибо за любые комментарии или хороший пример, связанный с этим.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

NLog может предоставить эту функцию.

См. NLog Tutorial для установки и настройки.

Есть ли лучший способ справиться с этим, регистрируя все вызовы метода, включая время и его параметры по требованию

Вам необходимо создать фильтр действий, он предоставит время, затраченное на запрос.

ActionFilter: (Возможно, вам придется изменить код по вашему требованию)

   public class LogHttpRequestAttribute : ActionFilterAttribute
   {
    private static Logger _logger = LogManager.GetCurrentClassLogger();

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
       _logger.Info("action execution started");
    }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        _logger.Info("action execution finished");
   }

The Global.asax:

protected void Application_Start()
{
    //Some code.

    // Register global filter
    GlobalFilters.Filters.Add(new LogHttpRequestAttribute());
}

Вы должны добавить цель для этого фильтра в файле NLog.config.

<targets>
    <target name="logfile" xsi:type="File" fileName="file.txt" />
</targets>
<rules>
    <logger name="*.LogHttpRequestAttribute" writeTo="logfile" />
</rules>

Приведенный выше пример далек отзавершено, но я надеюсь, что оно направит вас в правильном направлении.

Существует множество полезных средств визуализации макетов, заданных здесь ищите Web, ASP.NET и ASP.NETОсновной раздел. Немного из полезных:

  • $ {aspnet-mvc-action}
  • $ {aspnet-mvc-controller}
  • $ {aspnet-request-form}
  • $ {aspnet-request-querystring}
  • $ {aspnet-user-identity}

Включение ведения журнала и получение журналов для просмотра вместо отладкиприложения.

Чтобы отключить ведение журнала, установите enabled для атрибута rule в false или отключите в коде .

Это не только метод контроллера, все методы в вызове, которые мне нравится регистрировать.

Вы должны создать статическую переменную для этого в каждом классе, в который хотите войти.

private static readonly Logger _logger = LogManager.GetCurrentClassLogger();

Затем используйте этот элемент для регистрации данных.

_logger.Info("data");

Редактировать: Для входа любым способом.

using NLog;
public class DemoClass
{
    private static readonly Logger _logger = LogManager.GetCurrentClassLogger();

    public void DemoMethod()
    {
        try
        {
            //some code
            _logger.Info("Some information");
        }
        catch (Exception ex)
        {
            _logger.Error(ex, $"Something went wrong");
            throw;
        }
    }
}
0 голосов
/ 26 октября 2019

Вы можете отслеживать производительность своего приложения, предоставляя конечную точку метрики и используя панель мониторинга для визуализации метрик. Очень популярный подход заключается в использовании библиотеки App-Metrics для отображения метрик наряду с Prometheus и Grafana

https://www.app -metrics.io / web-monitor / aspnet-core /

...