.NET 8 Isolated Azure Functions日志无法显示在Azure门户调用追踪
.NET 8 Isolated Azure Functions 自定义日志不显示的问题解决
日志机制关键变化
.NET 8 Isolated模式下,默认日志过滤规则比.NET 6 Isolated更严格:
- 默认仅捕获
Microsoft前缀分类的Information及以上级别日志,非Microsoft前缀的自定义日志,默认仅捕获Warning及以上级别。 - 函数类的日志分类默认格式为
Function.<你的函数类名>.User,该分类的日志默认级别未设置为可见。
具体解决步骤
1. 调整host.json的日志过滤配置
修改host.json,显式设置自定义日志分类的最低级别,确保Information及以上日志能被收集:
{ "version": "2.0", "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" } }, "logLevel": { "Function.MyFunction.User": "Information", // 替换成你的函数对应的分类名 "Default": "Information" // 全局默认日志级别,可选 } } }
若不清楚日志分类名,可本地运行函数查看控制台输出,日志前缀会显示类似[Information] Function.MyFunction.User: 自定义日志内容的条目,其中Function.MyFunction.User即为分类名。
2. 正确使用日志注入
两种注入方式的正确写法:
构造函数注入ILogger(推荐)
public class MyFunction { private readonly ILogger<MyFunction> _logger; public MyFunction(ILogger<MyFunction> logger) { _logger = logger; } [Function("MyFunction")] public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req) { _logger.LogInformation("自定义日志消息:函数开始执行"); // 业务逻辑 var response = req.CreateResponse(HttpStatusCode.OK); await response.WriteStringAsync("执行完成"); return response; } }
通过FunctionContext获取ILogger
[Function("MyFunction")] public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req, FunctionContext context) { var logger = context.GetLogger<MyFunction>(); logger.LogInformation("通过FunctionContext获取的自定义日志"); // 业务逻辑 var response = req.CreateResponse(HttpStatusCode.OK); await response.WriteStringAsync("执行完成"); return response; }
3. 验证Application Insights配置
若依赖Application Insights展示日志:
- 确保函数应用的
APPLICATIONINSIGHTS_CONNECTION_STRING已在Azure门户的配置中正确设置。 - 确认
host.json中applicationInsights部分未禁用日志收集。
4. 本地调试排查
本地运行函数时查看控制台输出:
- 若自定义日志能在控制台打印,说明代码无问题,问题出在Azure门户的日志过滤或Application Insights同步延迟。
- 若本地也不显示,检查日志级别是否正确(比如不要用
LogTrace,默认不会捕获该级别),以及host.json的配置是否生效。
内容的提问来源于stack exchange,提问作者marc_s
相关产品推荐
相关产品推荐

