配置期间使用日志器:启动阶段能否获取ILogger对象?
在启动阶段的ConfigureAppConfiguration中输出日志的方案
可以实现,但没法直接在ConfigureAppConfiguration委托里拿到已完全配置好的ILogger——因为这个阶段应用配置还在加载,日志服务还没完成初始化,依赖注入容器里也还没注册ILogger实例。
给你两种可行的实现方式:
1. 使用临时日志记录器
在ConfigureAppConfiguration里手动创建一个临时的日志工厂,用来输出这个阶段的日志,示例代码:
var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureAppConfiguration((context, builder) => { // 搭建临时日志工厂,按需添加日志输出目标 var tempLoggerFactory = LoggerFactory.Create(logBuilder => { logBuilder.AddConsole(); // 也可以添加其他日志提供器,比如Debug输出 // logBuilder.AddDebug(); }); var logger = tempLoggerFactory.CreateLogger("AppConfigLoading"); logger.LogInformation("开始加载应用配置"); // 这里写你的配置加载逻辑 // builder.AddJsonFile("local.settings.json", optional: true); logger.LogInformation("应用配置加载完成"); }) .Build();
2. 延后日志输出到后续阶段
如果想使用最终配置好的日志系统,可以把需要日志输出的配置逻辑拆分,将日志相关操作移到ConfigureServices或ConfigureLogging之后的阶段。不过如果必须在配置加载过程中输出日志,第一种临时日志的方式更直接。
补充说明:ConfigureFunctionsWorkerDefaults已经内置了Azure Functions的日志配置,但这些配置要在ConfigureAppConfiguration执行完成后才会生效,所以在配置加载阶段只能用临时日志来输出信息。
内容的提问来源于stack exchange,提问作者MaxP
相关产品推荐
相关产品推荐

