.NET 6中如何在builder.Build()前使用ILogger记录日志
在.NET 6 WebAPI中Build前获取配置好的日志记录器
可以从builder.Host.Services中创建临时服务作用域,获取你通过builder.Host.ConfigureLogging配置好的日志记录器。具体实现如下:
修改你的Program.cs代码,在需要记录日志的位置添加以下逻辑:
var builder = WebApplication.CreateBuilder(args); string insightConnectionString = Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING"); builder.Host.ConfigureLogging(logging => { logging.ClearProviders(); logging.AddApplicationInsights(insightConnectionString); logging.AddConsole(); }); // -----> 在此处记录日志,调用「var app = builder.Build();」之前 <----- using (var scope = builder.Host.Services.CreateScope()) { var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>(); logger.LogInformation("日志配置完成,准备注册服务"); } builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // -----> 同样想在此处记录日志,调用「var app = builder.Build();」之前 <----- using (var scope = builder.Host.Services.CreateScope()) { var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>(); logger.LogInformation("服务注册完成,准备构建WebApplication"); } var app = builder.Build(); app.Logger.LogInformation("Log some information #1"); //... app.Logger.LogInformation("Log some information #2"); app.Run();
关键说明
- 使用
CreateScope()是因为在builder.Build()执行前,根服务容器尚未完全初始化,创建临时作用域可以安全获取已注册的日志服务 ILogger<Program>指定了日志的类别,你也可以替换为其他类型,或者通过ILoggerFactory创建自定义类别的日志实例
内容的提问来源于stack exchange,提问作者hlavoie22
相关产品推荐
相关产品推荐

