如何从Azure Function App日志中移除Azure.Storage.Blobs日志?
解决Azure.Storage.Blobs生成大量HTTP请求响应日志的问题
这些日志来自Azure SDK的Azure.Core.Http类别(Azure.Storage.Blobs依赖的Azure.Core库),默认以Information级别输出,会占用Application Insights的存储空间。以下是两种不影响其他日志的过滤方法:
方法1:通过host.json配置过滤
修改Function App的host.json文件,针对特定日志类别调整日志级别:
{ "version": "2.0", "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true } }, "logLevel": { // 禁用Azure SDK的HTTP请求/响应日志 "Azure.Core.Http": "None", // 仅保留Azure.Storage.Blobs的警告及以上级别日志 "Azure.Storage.Blobs": "Warning" } } }
Azure.Core.Http设为None:直接关闭HTTP请求和响应的Info级日志;Azure.Storage.Blobs设为Warning:仅记录Blob操作中的警告和错误日志,不影响你通过try-catch记录的错误信息。
方法2:通过代码配置日志过滤
如果host.json配置未生效(比如特殊环境限制),可在Function启动代码中添加日志过滤规则:
.NET 6+ 孤立模型(Program.cs)
var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureLogging(logging => { // 过滤Azure.Core的HTTP日志 logging.AddFilter("Azure.Core.Http", LogLevel.None); // 限制Blob日志级别为Warning及以上 logging.AddFilter("Azure.Storage.Blobs", LogLevel.Warning); }) .Build(); host.Run();
依赖注入模型(Startup.cs)
public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.Configure<LoggerFilterOptions>(options => { // 移除原有Azure.Core.Http日志规则(若存在) var azureCoreRule = options.Rules.FirstOrDefault(r => r.CategoryName == "Azure.Core.Http"); if (azureCoreRule != null) options.Rules.Remove(azureCoreRule); // 添加新的过滤规则 options.Rules.Add(new LoggerFilterRule(null, "Azure.Core.Http", LogLevel.None, null)); options.Rules.Add(new LoggerFilterRule(null, "Azure.Storage.Blobs", LogLevel.Warning, null)); }); } }
配置完成后,那些无意义的HTTP请求/响应日志将不再被发送到Application Insights,同时保留其他业务日志和Blob操作的错误日志。
内容的提问来源于stack exchange,提问作者BladeZ
相关产品推荐
相关产品推荐

