Azure Function App日志配置疑问:Application Insights仅显示Warning级日志
Azure Function App 日志到 Application Insights 不完整问题的解决配置
1. 核心配置:调整 host.json 日志规则
直接修改项目根目录的host.json,重点调整logging节点:
- 全局
logLevel需覆盖你需要的日志类别,比如将自身函数命名空间设为Trace,确保低级别日志能被捕获:
"logLevel": { "Default": "Information", "Your.Function.Namespace": "Trace", // 替换为你的函数实际命名空间 "Microsoft": "Warning" // 系统日志级别,按需调整 }
- 单独配置
applicationInsights节点,避免它覆盖全局规则,强制所有级别日志发送到AI:
"applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" }, "logLevel": { "Default": "Trace" // 关键配置:确保AI接收全级别日志 } }
若applicationInsights未显式设置logLevel,可能会存在隐性过滤,直接配置更稳妥。
2. 测试阶段临时关闭采样
采样是AI默认的流量控制机制,测试时可临时关闭以确保全量日志上报:
将samplingSettings中的isEnabled改为false,生产环境记得改回true,避免日志量过载。
3. 代码中使用标准日志接口
禁止使用Console.WriteLine这类非标准日志方式,必须依赖注入ILogger:
public class MyFunction { private readonly ILogger<MyFunction> _logger; public MyFunction(ILogger<MyFunction> logger) => _logger = logger; [FunctionName("MyFunction")] public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req) { _logger.LogTrace("Trace级日志内容"); _logger.LogInformation("Info级日志内容"); _logger.LogWarning("Warning级日志内容"); // 业务逻辑代码 } }
只有通过ILogger输出的日志才会被Azure Functions日志管道捕获并发送到AI。
4. Azure门户端配置检查
- 确认函数应用配置中的
APPINSIGHTS_INSTRUMENTATIONKEY配置正确,无拼写错误 - 查询AI的
traces时,注意选择足够长的时间范围,日志通常有1-5分钟的延迟 - 若门户中存在
APPINSIGHTS_LOG_LEVEL这类应用设置,会直接覆盖host.json配置,可删除或调整为所需级别
5. 系统日志(如"Sending invocation id...")的捕获
这类Runtime日志属于Microsoft类别,要收集其Trace级别日志,只需将host.json中"Microsoft"的日志级别设为Trace即可,生产环境建议调回Warning或Information,避免系统日志过载。
内容的提问来源于stack exchange,提问作者Bernhard Hiller
相关产品推荐
相关产品推荐

