部署后Azure Function的ILogger LogInformation日志未完整输出
Durable Azure Function Information级日志丢失修复
直接按以下步骤核对配置,90%以上的日志丢失都是这几个配置遗漏导致:
1. 补全host.json日志配置
本地运行时默认用宽松的日志规则,部署到Azure后会加载生产默认规则,必须显式配置日志级别、关闭采样,以下是可直接复用的配置片段:
{ "version": "2.0", "logging": { "logLevel": { "default": "Information", "Function": "Information", "DurableTask.Core": "Information", "DurableTask.AzureStorage": "Information", "Microsoft.Azure.WebJobs.Extensions.DurableTask": "Information", "Host.Results": "Error", "Host.Aggregator": "Trace" }, "applicationInsights": { "samplingSettings": { "isEnabled": false } } }, "extensions": { "durableTask": { "tracing": { "traceReplayEvents": true } } } }
2. 对应配置项说明
- 关闭采样:Azure Function生产环境默认开启自适应采样,会根据负载动态丢弃Information级日志,相邻日志只输出一条基本都是采样规则导致的。本地环境默认不开启采样所以日志全量打印,低流量测试环境直接把
isEnabled设为false即可,生产环境如果流量较高可自定义采样规则,必须排除Durable Task相关命名空间的日志不参与采样。 - 显式指定Durable Task命名空间日志级别:默认生产配置下DurableTask相关命名空间的最低日志级别是Warning,不会输出Information级日志,必须显式设为Information才能采集你在Durable函数上下文里输出的日志。
- 开启重放事件追踪:Durable Function的Orchestrator函数会在等待异步任务返回后多次重放执行,默认框架会自动过滤重放过程中重复输出的日志,就会出现同一代码块里相邻日志有的输出有的被过滤的情况,把
traceReplayEvents设为true就会记录所有执行过程的日志,包括重放阶段的输出。
3. 额外排查点
- 检查Azure门户函数应用的应用程序设置:如果在配置里加了
AzureFunctionsJobHost__logging__开头的相关配置,优先级会高于host.json,会覆盖你部署的文件里的配置,要删掉这类冲突配置,或者显式设为正确值。 - 检查日志流页面筛选规则:Azure门户日志流页面顶部默认的日志级别筛选经常默认选中Warning,会直接过滤掉Information级日志,这种情况只是页面不显示,不会影响日志写入存储。
注意:Orchestrator函数的重放机制会导致同一行代码多次执行,非排查场景不建议在Orchestrator里输出大量日志,排查类日志尽量放到Activity函数里输出,不会受重放过滤影响。
内容的提问来源于stack exchange,提问作者wilson_smyth
相关产品推荐
相关产品推荐

