.Net Core 3.1
Infelizmente, para ASP.NET Core 3.0, a situação é um pouco diferente. Os modelos padrão usam o HostBuilder(em vez do WebHostBuilder), que configura um novo host genérico que pode hospedar vários aplicativos diferentes, não se limitando a aplicativos da web. Parte desse novo host também é a remoção do segundo contêiner de injeção de dependência que existia anteriormente para o host da web. Em última análise, isso significa que você não poderá injetar quaisquer dependências além do IConfigurationna Startupclasse. Portanto, você não poderá registrar durante o ConfigureServicesmétodo. Você pode, no entanto, injetar o logger no Configuremétodo e registrar lá:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
{
logger.LogInformation("Configure called");
// …
}
Se você realmente precisa fazer login ConfigureServices, pode continuar a usar o WebHostBuilderque criará o legado WebHostque pode injetar o logger na Startupclasse. Observe que é provável que o host da web seja removido em algum momento no futuro. Portanto, você deve tentar encontrar uma solução que funcione para você, sem ter que fazer login ConfigureServices.
.NET Core 2.x
Isso mudou significativamente com o lançamento do ASP.NET Core 2.0. No ASP.NET Core 2.x, o log é criado no construtor de host. Isso significa que o registro está disponível por meio de DI por padrão e pode ser injetado na Startupclasse:
public class Startup
{
private readonly ILogger<Startup> _logger;
public IConfiguration Configuration { get; }
public Startup(ILogger<Startup> logger, IConfiguration configuration)
{
_logger = logger;
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
_logger.LogInformation("ConfigureServices called");
// …
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
_logger.LogInformation("Configure called");
// …
}
}