Azure Functions的KQL日志表位置及自定义日志查询问题
Azure Functions自定义日志问题解析与解决方案
自定义日志的存储位置
你找不到logs表是正常的——通过ILogger记录的自定义日志默认存在trace表中,而非单独的logs表。你当前看到trace表只有框架日志,是因为没做筛选,自定义日志其实和框架日志混在一起,需要通过Category字段区分。
KQL查询自定义日志
直接在trace表中筛选你的应用命名空间(比如Company.App)即可分离出自定义日志,示例KQL查询:
trace | where Category == "Company.App" // 替换为你的实际日志类别 | where SeverityLevel in (0,1,2) // 0=Verbose,1=Debug,2=Information,按需调整 | project TimeGenerated, Message, Category, SeverityLevel
日志流冗余日志过滤
仅设置AzureFunctionsJobHost__logging__LogLevel__Default为Information无法过滤框架冗余日志,因为Functions runtime的核心组件(如Function.*、Microsoft.*)有独立的日志级别配置。需要在host.json中精细化配置:
{ "logging": { "logLevel": { "Default": "Information", "Function": "Warning", // 降低函数运行时框架日志级别 "Microsoft": "Warning", // 降低微软组件日志级别 "Company.App": "Trace" // 保留你的应用日志为Trace级别 } } }
这样就能只保留你的自定义日志,过滤大部分框架冗余输出。
框架在Information级别记录HTTP头的原因
这是Functions runtime的默认行为:HTTP触发器的请求日志默认以Information级别记录,包含请求头、路径等详情。如果不需要这些细节,可以在host.json中进一步调整HTTP相关组件的日志级别:
{ "logging": { "logLevel": { "Microsoft.Azure.WebJobs.Script.WebHost.Http": "Warning" } } }
host.json中Company.App: "Trace"的作用
这个配置仅控制你的应用命名空间下的日志输出级别,不会导致框架日志增多。它的作用是让你通过ILogger<YourClass>记录的Trace级日志能被采集,而框架日志的级别由其他配置项(如Microsoft.*、Function.*)控制。你当前遇到的框架冗余日志问题和这个配置无关。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

