如何在Azure门户查找Python函数logging库生成的自定义日志
Azure Python Functions 自定义Info日志在Application Insights不可见的排查方案
你能看到系统默认的Warning/Error日志、看不到自定义Info日志,90%以上的情况是日志过滤规则、配置、查询方式的问题,和已配置的两个Application Insights连接参数无关,按以下步骤逐一排查即可:
1. 修正host.json日志级别配置(最高发问题)
Azure Functions运行时默认对用户代码输出的日志设置了Warning级别的过滤阈值,你写的logging.info()属于Information级别,默认会被直接丢弃,根本不会上报到Application Insights。
你需要在函数项目的host.json文件中,显式把用户函数的日志级别调整为Information,参考配置如下:
{ "version": "2.0", "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" } }, "logLevel": { "default": "Warning", "Function": "Information", "Host.Results": "Error", "Host.Aggregator": "Trace" } } }
配置说明:
Function节点对应所有用户函数代码输出的日志,必须设置为Information,Info级别的自定义日志才会被放行- 不要把
default级别设成Information,会导致大量系统底层无意义日志上报,增加不必要的成本
2. 检查代码日志写法,避免覆盖默认日志管道
不要做以下两种会破坏Azure默认日志配置的操作:
- 不要在代码中调用
logging.basicConfig()自行配置日志,这个操作会覆盖Azure Functions预注入的Application Insights日志handler,导致日志无法上报 - 不要给自行创建的命名logger单独设置高于Info的过滤级别,如果你用
logging.getLogger(__name__)创建独立logger,不要额外调用logger.setLevel(logging.WARNING)这类配置
最稳妥的写法是直接使用根logger输出日志:
import logging import azure.functions as func def main(req: func.HttpRequest) -> func.HttpResponse: # 直接输出info级自定义日志 logging.info("自定义日志:函数开始处理请求,请求ID:%s", req.func_context.invocation_id) # 业务逻辑代码 return func.HttpResponse("OK")
3. 用正确的方式在Application Insights中检索日志
不要只依赖Transaction search的默认筛选条件,默认筛选经常漏掉Info级别的Trace日志:
- 方式一:进入Application Insights的日志板块,用KQL语句直接查询traces表,自定义日志全部存在这张表中,参考查询语句:
traces | where timestamp > ago(1h) // 调整为你需要的时间范围 | where customDimensions.Category startswith "Function." // 筛选用户函数输出的日志 | project timestamp, message, customDimensions.FunctionName, severityLevel | order by timestamp desc
- 方式二:如果用Transaction search,需要手动调整筛选条件:
- 事件类型勾选
Trace(默认很多场景下不勾选这个类型) - 事件级别勾选
Information - 把时间范围调整到函数触发的对应时间段
- 事件类型勾选
4. 其他边缘场景排查
- 配置修改后必须重启函数应用,host.json的配置不会热生效,重启后等待1-2分钟(Application Insights日志入库有10秒到3分钟不等的延迟)再触发函数测试
- 高负载场景下默认开启的采样功能会丢弃部分Info级日志,测试环境排查时可以临时把host.json中
samplingSettings.isEnabled设为false验证,生产环境建议调整采样比例而非直接关闭 - 如果你使用的是旧版本Linux消费计划Python函数,将应用设置
FUNCTIONS_EXTENSION_VERSION设为~4,升级到V4运行时可修复旧版本worker存在的Info日志丢失bug
内容的提问来源于stack exchange,提问作者sergioMoreno
相关产品推荐
相关产品推荐

