Отключить сообщения журнала трассировки по умолчанию из веб-приложения в приложении Insights - PullRequest
0 голосов
/ 02 января 2019

Я создал веб-приложение в Azure и веб-API в базовой структуре .Net, следуя инструкциям в этой ссылке .
Теперь в моем веб-приложении включена функция Application Insights.
В WebAPI есть похожий код для ведения журнала.

public class Startup
{
    public Startup()
    {
    } 
     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {

        loggerFactory.AddConsole();
        var logger = loggerFactory.CreateLogger<ConsoleLogger>();
        logger.LogInformation("Executing Configure()");
    }
}

public class HomeController : Controller
{
    ILogger _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }
    public IActionResult Index()
    {
        _logger.LogInformation("Executing Home/Index")
        return View();
    } 
}

По умолчанию он печатает некоторые журналы трассировки, похожие на Application Insights.

2019-01-02T07:22:49 Executing Home/Index
2019-01-02T07:22:49 Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext.
2019-01-02T07:22:50 Executed action [SomeActionName] (APIName) in 6487.7982ms
2019-01-02T07:22:50 Request finished in 6917.8019ms 200 application/json; charset=utf-8

Теперь мое требование не должнораспечатать все журналы по умолчанию в Application Insights.Он должен печатать только те, которые имеют _logger.LogInformation.Как и где я могу отключить эту функцию?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Не уверен, как вы включили интеграцию Ilogger с пониманием приложений, но поддерживаемый в настоящее время способ описан здесь. https://github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/Logging

Второй параметр в методе расширения определяет, какие сообщения будут восприняты приложениями. loggerFactory.AddApplicationInsights (app.ApplicationServices, LogLevel.Warning);

Это должно ограничить журналы Предупреждение или выше, которые будут отправлены для понимания приложения. Конечно, вы можете использовать ITelemetryprocessor для фильтрации журналов, но это дороже, так как журналы уже собраны, но позже отброшены, что приводит к потере вычислительных циклов / памяти.

0 голосов
/ 02 января 2019

Вы можете использовать ITelemetryProcessor для фильтрации нежелательных сообщений (включая трассировку).

1.Вы можете проверить свой проект локально с помощью аналитики приложения, а затем использовать Поиск аналитики приложения , чтобы проверить нежелательные сообщения трассировки, проверьте его CategoryName (или другое свойство, которое может указывать это), как на скриншоте ниже:

enter image description here

2.Создайте пользовательский класс, который реализует ITelemetryProcessor. Здесь я использую CategoryName для фильтрации нежелательных сообщений трассировки, вы можете настроить код самостоятельно:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;

namespace WebApplication1netcore4
{
    public class MyTelemetryProcessor : ITelemetryProcessor
    {
        private ITelemetryProcessor Next { get; set; }

        public MyTelemetryProcessor(ITelemetryProcessor next)
        {
            this.Next = next;
        }

        public void Process(ITelemetry telemetry)
        {

            TraceTelemetry trace = telemetry as TraceTelemetry;

            if (trace != null && trace.Context.Properties.Keys.Contains("CategoryName"))
            {
                //Here I just filter out 2 kinds of trace messages, you can adjust your code as per your need.
                if (trace.Context.Properties["CategoryName"] == "Microsoft.AspNetCore.Hosting.Internal.WebHost" || trace.Context.Properties["CategoryName"] == "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker")
                {
                    //return means abandon this trace message which has the specified CategoryName
                    return;
                }
            }

            if (trace == null)
            {
                this.Next.Process(telemetry);

            }

            if (trace != null)
            {
                this.Next.Process(trace);
            }
        }
    }
}

3.В методе Startup.cs -> ConfigureServices () добавьте следующий код:

services.AddApplicationInsightsTelemetry();

services.AddApplicationInsightsTelemetryProcessor<MyTelemetryProcessor>();

4.После проверки вы увидите, что нежелательные сообщения трассировки отфильтрованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...