本地运行Azure Functions(.NET7隔离模式v4)如何获取日志分类?
本地查看Function App日志分类的解决方案(.NET7 Isolated v4)
针对你遇到的本地调试时控制台日志不输出Category导致无法配置过滤规则的问题,以下是几个无需部署的本地解决方案:
1. 修改host.json自定义控制台日志模板
直接在host.json中配置控制台日志的输出模板,显式包含日志分类字段:
{ "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" } }, "logConsole": { "formatterName": "simple", "formatterOptions": { "template": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] {Category} - {Message}{NewLine}{Exception}" } }, "logLevel": { "Default": "Information", "Microsoft": "Warning" } } }
添加{Category}字段后,重启本地调试就能在控制台看到每条日志对应的分类标识。
2. 在Program.cs中配置自定义控制台日志格式化器
由于.NET Isolated Function基于通用主机,可直接在Program.cs中自定义控制台日志输出格式,灵活控制显示内容:
var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults(builder => { builder.ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(options => { options.FormatterName = "custom"; options.FormatterOptions = new SimpleConsoleFormatterOptions { Template = "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] {Category} - {Message}{NewLine}{Exception}" }; }); }); }) .Build(); host.Run();
该方式会覆盖默认日志配置,确保控制台输出包含Category信息。
3. 使用Serilog作为日志提供器
若需要更强的日志控制能力,可集成Serilog并配置输出模板显示分类:
- 安装NuGet包:
Serilog.AspNetCore、Serilog.Sinks.Console - 在
Program.cs中配置Serilog:
using Serilog; var logger = new LoggerConfiguration() .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] {Category} - {Message}{NewLine}{Exception}") .CreateLogger(); var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults(builder => { builder.Services.AddLogging(logging => { logging.ClearProviders(); logging.AddSerilog(logger, dispose: true); }); }) .Build(); host.Run();
配置完成后,控制台日志会清晰展示每条日志的分类,便于后续在host.json中添加对应过滤规则。
内容的提问来源于stack exchange,提问作者Andrey Stukalin
相关产品推荐
相关产品推荐

