禁用Azure Functions App不必要的日志收集(仅保留AppExceptions)
针对Azure Functions v3禁用非AppExceptions日志的解决方案
方法一:通过host.json配置(推荐,无需修改代码)
修改函数应用的host.json文件,通过配置日志级别和App Insights遥测过滤来实现需求:
{ "version": "2.0", "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request;Metric" }, // 可选:关闭不需要的额外遥测收集 "enableDependencyTracking": false, "enablePerformanceCountersCollection": false }, "logLevel": { // 仅保留函数相关的错误日志,关闭系统/框架类日志 "Function": "Error", "Microsoft": "None", "System": "None" }, // 可选:如果日志写入Azure存储文件系统,限制仅保留错误级日志 "fileLoggingMode": "debugOnly" } }
配置说明:
excludedTypes: "Request;Metric":直接排除AppRequests(请求遥测)和AppMetrics(指标遥测),仅保留AppExceptions(异常遥测)及未被排除的必要遥测。logLevel:设置仅收集函数相关的错误级别日志,关闭Microsoft和System命名空间的所有日志,减少写入存储的冗余日志量。fileLoggingMode:若日志存储在Azure存储账户的文件系统中,设置为debugOnly可仅保留调试级以上的错误日志,进一步降低存储占用。
方法二:通过代码自定义遥测处理器(适合复杂过滤场景)
如果需要更精细的控制,可添加自定义遥测处理器,仅保留异常遥测:
- 创建遥测处理器类:
using Microsoft.ApplicationInsights.Channel; using Microsoft.ApplicationInsights.Extensibility; public class ExceptionOnlyTelemetryProcessor : ITelemetryProcessor { private readonly ITelemetryProcessor _nextProcessor; public ExceptionOnlyTelemetryProcessor(ITelemetryProcessor nextProcessor) { _nextProcessor = nextProcessor; } public void Process(ITelemetry telemetry) { // 仅处理异常类型的遥测 if (telemetry is ExceptionTelemetry) { _nextProcessor.Process(telemetry); } // 其他类型遥测直接丢弃 } }
- 在Startup.cs中注册处理器(仅适用于In-Process模型的C#函数):
using Microsoft.Azure.Functions.Extensions.DependencyInjection; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.Extensions.DependencyInjection; [assembly: FunctionsStartup(typeof(YourFunctionAppNamespace.Startup))] namespace YourFunctionAppNamespace { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddApplicationInsightsTelemetryProcessor<ExceptionOnlyTelemetryProcessor>(); } } }
验证配置
修改配置后重新部署函数应用,运行之前的Kusto查询,确认AppRequests和AppMetrics不再被收集,AppExceptions可正常捕获。
内容的提问来源于stack exchange,提问作者Yusuf Demir
相关产品推荐
相关产品推荐

