1
votes

Désactiver les messages du journal de suivi par défaut de Web App dans Application insights

J'ai créé une application Web dans Azure et une API Web dans le cadre de base .Net en suivant les instructions de ce lien .
Désormais, dans mon application Web, Application Insights est activé.
Dans WebAPI, il existe un code similaire pour la journalisation.

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

Par défaut, il imprime des journaux de suivi, quelque chose de similaire dans Application Insights.

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

Maintenant, mon exigence est qu'il ne devrait pas imprimer tous les journaux par défaut dans Application Insights. Il ne doit imprimer que ceux avec _logger.LogInformation . Comment et où désactiver cette fonctionnalité?


5 commentaires

Où sont ces journaux, dans Azure ou dans votre VS?


@TaoZhou C'est dans Azure.


Vous pouvez utiliser ITelemetryProcessor pour filtrer les messages de trace inutiles.


@IvanYang ce serait gentil de ta part, si tu pouvais me montrer un exemple


Oui, juste un instant.


3 Réponses :


2
votes

Vous pouvez utiliser ITelemetryProcessor pour filtrer les messages indésirables (y compris la trace).

1.Vous pouvez tester votre projet localement avec des informations sur les applications, puis utiliser la Recherche des informations sur les applications pour vérifier la messages de trace indésirables, vérifiez qu'il s'agit de NomCatégorie (ou d'une autre propriété qui peut le spécifier), comme la capture d'écran ci-dessous:

 entrez la description de l'image ici p >

2.Créez une classe personnalisée qui implémente ITelemetryProcessor. Ici, j'utilise le CategoryName pour filtrer les messages de trace indésirables, vous pouvez ajuster le code vous-même:

services.AddApplicationInsightsTelemetry();

services.AddApplicationInsightsTelemetryProcessor<MyTelemetryProcessor>();

3.Dans Startup.cs -> méthode ConfigureServices (), ajoutez le code suivant:

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

4.Après le test, vous pouvez voir que les messages de trace indésirables sont filtrés.


0 commentaires

0
votes

Vous ne savez pas comment vous avez activé l'intégration d'Ilogger avec les informations d'application, mais la méthode actuellement prise en charge est décrite ici. https://github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/Logging

Le deuxième paramètre de la méthode d'extension contrôle quels messages sont captés par les informations d'application. loggerFactory.AddApplicationInsights (app.ApplicationServices, LogLevel.Warning);

Cela devrait limiter les journaux d'avertissement ou supérieurs à envoyer aux insights d'application. Vous pouvez bien sûr utiliser un processeur ITelemetry pour filtrer les journaux, mais cela coûte plus cher car les journaux sont déjà collectés mais supprimés par la suite, gaspillant des cycles de calcul / de la mémoire.


0 commentaires

0
votes

Une autre façon de désactiver certains types de messages de journal consiste à utiliser appsettings.json:

"Logging": {
 "LogLevel": {
   "Default": "Trace",
   "Microsoft.AspNetCore.Hosting.Internal.WebHost": "None",
   "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker": "None",
 }
},

Cela désactive la même télémétrie que la réponse de @Ivan Young mais vous permet de modifier les paramètres sans changement de code .


1 commentaires

Cela ne fonctionne pas pour moi ... Je vois toujours tous les journaux internes.