.NET Core6 Azure应用:如何在appsettings.json配置Serilog禁用HttpRequest日志
禁用Azure Application Insights自动收集HttpRequest日志的正确配置方式
你当前的问题在于将EnableRequestTrackingTelemetryModule配置在了Serilog Sink的参数中,而这个配置项属于Azure Application Insights原生SDK的设置,并非Serilog Sink的参数,因此不会生效。以下是两种正确的配置方式:
方式1:通过appsettings.json配置
在appsettings.json的根节点下添加ApplicationInsights配置块,而非嵌套在Serilog的WriteTo参数里:
{ "Serilog": { // 保留你原有的Serilog配置 "Using": [ "Serilog.Sinks.ApplicationInsights" ], "MinimumLevel": { "Default": "Information", "Override": { "Microsoft.AspNetCore.Hosting.Diagnostics": "Warning", "Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware": "Warning", "Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker": "Warning", "Microsoft.EntityFrameworkCore.Database.Command": "Warning", "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Warning", "Microsoft.Extensions.Http.DefaultHttpClientFactory": "Warning", "Microsoft.AspNetCore.Server.Kestrel": "Warning", "Microsoft.AspNetCore.Mvc.ModelBinding": "Warning", "Microsoft.AspNetCore.Routing": "Warning" } }, "WriteTo": [ { "Name": "ApplicationInsights", "Args": { "connectionString" : "InstrumentationKey=ff394818-38fa-4239-8cb4-3380d6812e4d;IngestionEndpoint=https://westeurope-1.in.applicationinsights.azure.com/;LiveEndpoint=https://westeurope.livediagnostics.monitor.azure.com/", "restrictedToMinimumLevel": "Information", "telemetryConverter": "Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights" // 移除这里的EnableRequestTrackingTelemetryModule配置 } } ], "Enrich": [ "FromLogContext" ] }, "ApplicationInsights": { "ConnectionString": "InstrumentationKey=ff394818-38fa-4239-8cb4-3380d6812e4d;IngestionEndpoint=https://westeurope-1.in.applicationinsights.azure.com/;LiveEndpoint=https://westeurope.livediagnostics.monitor.azure.com/", "EnableRequestTrackingTelemetryModule": false } }
方式2:通过Program.cs代码配置
如果更倾向于代码层面控制,可在配置Web主机时直接配置Application Insights服务选项:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false); config.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true); var configuration = config.Build(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel() .UseStartup<Startup>() .ConfigureServices(services => { // 配置Application Insights并禁用请求追踪模块 services.AddApplicationInsightsTelemetry(options => { options.ConnectionString = "InstrumentationKey=ff394818-38fa-4239-8cb4-3380d6812e4d;IngestionEndpoint=https://westeurope-1.in.applicationinsights.azure.com/;LiveEndpoint=https://westeurope.livediagnostics.monitor.azure.com/"; options.EnableRequestTrackingTelemetryModule = false; }); }); }) .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration) );
补充说明
- 你当前Serilog配置中的
Override节点是过滤日志输出,避免Serilog记录Microsoft.AspNetCore相关的日志,但这和Application Insights原生模块自动收集的RequestTelemetry(即HttpRequest日志)是两个独立的机制,因此必须通过禁用RequestTrackingTelemetryModule来停止自动收集请求日志。 - 确保你的项目已安装
Microsoft.ApplicationInsights.AspNetCoreNuGet包,Serilog Sink依赖该包实现与Application Insights的集成。
内容的提问来源于stack exchange,提问作者Yehia A.Salam
相关产品推荐
相关产品推荐

