Je construis de toutes nouvelles API Web avec .NET core 2.2. Dans mon Startup.cs
J'ai défini ILoggerFactory
dans la méthode configure. Quand je fais une telle chose et ajoute le code suivant
loggerFactory.AddConsole();
loggerFactory.AddDebug();
Je reçois des informations disant que cette méthode est obsolète et qu'elle sera supprimée dans les futures versions, à la place, je devrais utiliser ILoggingBuilder
. Pas de problème, j'ai remplacé par cette nouvelle méthode de journalisation et dès que je démarre les API Web, je reçois Erreur
InvalidOperationException: aucun service pour le type "Microsoft.Extensions.Logging.ILoggingBuilder" n'a été enregistré.
et ma fenêtre de sortie montre cela
Impossible de résoudre un service de type "Microsoft.Extensions.Logging.ILoggingBuilder" pour le paramètre "loggingBuilder" de la méthode.
Je suis nouveau sur .NET core, mais ai-je raté quelque chose ici? Avec ILoggerFactury, je n'ai pas eu à enregistrer de services et la journalisation fonctionnerait très bien. la documentation de Microsoft ici n'est pas vraiment utile.
Startup.cs ressemble à ceci:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.Microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggingBuilder loggingBuilder)
{
loggingBuilder.AddConsole();
loggingBuilder.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler();
}
app.UseMvc();
//app.Run(async (context) =>
//{
// await context.Response.WriteAsync("Hello World!");
//});
}
}
Program.cs ressemble à ceci:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
Cela ne fonctionne pas car vous n'enregistrez pas les composants de journalisation avec votre conteneur d'injection de dépendance. Vous pouvez procéder de deux manières:
Soit le configurer dans le cadre de CreateWebHostBuilder
:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConsole();
logging.AddDebug();
})
.UseStartup<Startup>();
Ou bien, enregistrez-le avec votre collection de services sous ConfigureServices
:
services.AddLogging(logging =>
{
logging.AddConsole();
logging.AddDebug();
});