You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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();

// -----&gt; 同样想在此处记录日志,调用「var app = builder.Build();」之前 &lt;-----
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:39:53