当前位置: 首页 > 知识库问答 >
问题:

在应用程序洞察中禁用来自Web App的默认跟踪日志消息

祝嘉懿
2023-03-14

按照此链接中的说明,我在Azure中创建了一个Web应用程序,在.NET core framework中创建了一个Web API。
现在在我的Web应用程序中,启用了应用程序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();
    } 
}

默认情况下,它会打印一些跟踪日志(类似于应用程序洞察)。

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

现在我的要求是它不应该打印应用程序Insights中的所有默认日志。它只能打印带有_logger.loginformation的文件。如何和在何处禁用此功能?

共有1个答案

陆伟
2023-03-14

您可以使用ITelemetryProcessor过滤掉不需要的消息(包括跟踪)。

1.你可以用app insights在本地测试你的项目,然后用Application insights搜索检查不需要的跟踪消息,检查它的CategoryName(或其他可以指定它的属性),如下图所示:

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

services.AddApplicationInsightsTelemetryProcessor<MyTelemetryProcessor>();
 类似资料:
  • 我有一个Azure函数连接到一个App Insights实例。函数app会发出日志消息,我可以在Azure portal的日志流中看到这些消息,并在app Insights跟踪时看到这些消息。 通过在中添加元素(https://github.com/Azure/azure-webjobs-sdk-script/wiki/host.json),我将控制台日志级别增加到了详细,因此详细级别的消息会出现

  • 这只是一个每分钟都会运行半个小时的测试函数。 这似乎部分工作,因为我可以看到一些遥测在AI但不是自定义事件。例如,我可以看到每次运行时都会出现一个请求,以及在WebJob初始化期间的各种跟踪。 我可能没有正确配置某些内容,或者没有以正确的方式获取,但是我找不到任何关于在WebJobs中跟踪自定义事件的文档。 如有任何帮助,我们将不胜感激。

  • 我想我找遍了所有地方,但我找不到任何图表或报告与参考交通数据。我使用的是在预览Azure门户中存储数据的最新版本。在旧的应用程序中,insights(在VS Online中)就有这个数据。 有没有人知道在新门户中是否可以找到它,以及在哪里可以找到它? 提前道谢!

  • 我想有一个共享的应用程序insights实例,将保存来自不同微服务运行的所有日志。 或者说,共享应用程序insights实例并将所有日志和遥测都放在一堆中是不是一个坏主意?

  • 如何在使用调试配置时自动禁用应用程序洞察并仅在发布时启用它? 是否可以在不创建另一个仅用于调试的检测密钥的情况下执行此操作? 语句散布在整个代码中,将它们封闭在调试预处理器检查中不是理想的解决方案。 我当前的解决方案是将文件的设置为,这样它就不会复制到项目的输出目录中,但这不是一个可以根据活动生成配置自动完成的过程。 有一个开发人员模式,但需要手动更改(如果有条件地设置配置文件是可能的,那么清空i

  • Azure应用程序洞察或日志分析的用例是什么? 我正在使用APIM和Azure函数,并希望对请求执行日志记录。应用洞察和日志分析哪一个最合适? https://docs.microsoft.com/en-gb/Azure/Azure-monitor/overview 更新 特别是关于APIM使用的Azure应用程序洞察与日志分析的任何信息?