Azure Function v4(.NET6) Table绑定日志冗余问题及屏蔽方法咨询
问题描述
我将Azure Function从v3版本升级至v4(基于.NET6),同时更新了运行时绑定。测试过程中发现Table绑定会产生大量冗余日志,与自定义日志混杂,导致难以查看有效日志内容。
函数代码示例
[FunctionName("Function2")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, [Table("Keys", Connection = "TableStorage")] TableClient keysTable, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); if (keysTable != null) { try { var item2 = keysTable.GetEntity<TableEntity>("jon", "test"); } catch (Exception) { log.LogError("key not present"); } } log.LogInformation("C# HTTP trigger function completed."); return new OkObjectResult(new { }); }
日志输出示例
2022-12-28T12:40:14Z [Information] Request [6b093468-5e75-4e8c-b358-e47f0dffc632] POST https://xxx.table.core.windows.net/Tables?$format=REDACTED x-ms-version:REDACTED DataServiceVersion:REDACTED Prefer:REDACTED Accept:application/json; odata=minimalmetadata x-ms-client-request-id:6b093468-5e75-4e8c-b358-e47f0dffc632 x-ms-return-client-request-id:true User-Agent:azsdk-net-Data.Tables/12.7.1,(.NET 6.0.11; Microsoft Windows 10.0.14393) x-ms-date:REDACTED Authorization:REDACTED Content-Type:application/json; odata=nometadata client assembly: Azure.Data.Tables 2022-12-28T12:40:14Z [Information] Response [6b093468-5e75-4e8c-b358-e47f0dffc632] 409 Conflict (00.0s) Cache-Control:no-cache Transfer-Encoding:chunked Server:Windows-Azure-Table/1.0,Microsoft-HTTPAPI/2.0 x-ms-request-id:e63cd248-2002-0051-25b9-1ae043000000 x-ms-client-request-id:6b093468-5e75-4e8c-b358-e47f0dffc632 x-ms-version:REDACTED X-Content-Type-Options:REDACTED Preference-Applied:REDACTED Date:Wed, 28 Dec 2022 12:40:13 GMT Content-Type:application/json; odata=minimalmetadata; streaming=true; charset=utf-8 2022-12-28T12:40:14Z [Information] Executing 'Function2' (Reason='This function was programmatically called via the host APIs.', Id=3598edde-1658-414b-9cc4-481bb6f7810e) 2022-12-28T12:40:14Z [Information] C# HTTP trigger function processed a request.,
当前host.json配置
{ "version": "2.0", "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" } } } }
我原本预期仅显示自定义日志内容。查阅官方文档了解到Functions 2.x及以上版本中Application Insights会自动收集绑定依赖数据,但未找到屏蔽方法。现咨询:如何屏蔽Table绑定产生的冗余日志?是否有必要进行屏蔽?
解决方案与建议
一、屏蔽Table绑定冗余日志的方法
这些冗余日志来自Azure.Data.Tables客户端库的日志输出,可通过修改host.json的日志过滤规则实现屏蔽:
针对Table客户端库设置日志级别
在host.json的logging节点下新增logLevel配置,将Azure.Data.Tables命名空间的日志级别设为Warning或更高,即可过滤掉Info级别的请求/响应日志:{ "version": "2.0", "logging": { "logLevel": { "Azure.Data.Tables": "Warning" }, "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" } } } }若需完全屏蔽该库的所有日志,可设置为
None:"Azure.Data.Tables": "None"补充过滤Functions绑定宿主日志
如果还有来自Functions绑定组件的冗余日志,可同时添加Microsoft.Azure.WebJobs.Extensions.Tables的过滤规则:"logLevel": { "Azure.Data.Tables": "Warning", "Microsoft.Azure.WebJobs.Extensions.Tables": "Warning" }
二、是否有必要屏蔽?
是否屏蔽取决于实际需求:
- 建议屏蔽的场景:
- 日常开发调试时,冗余日志会干扰自定义日志的查看,增加问题定位成本;
- 生产环境中,若无需追踪Table存储的底层请求细节,屏蔽可减少日志量、降低存储成本,同时提升日志查询效率。
- 不建议屏蔽的场景:
- 排查Table存储调用问题(如超时、权限错误)时,这些日志能提供完整的请求/响应详情,帮助快速定位问题;
- 需要监控Table存储调用性能(如响应时间)时,这些日志是重要的数据源。
日常场景下建议设置为Warning级别,既保留错误日志用于排查问题,又屏蔽冗余的Info级请求日志。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

