web-dev-qa-db-fra.com

Mappez ILogger à Serilog's Logger après la mise à jour de la journalisation ASP.NET Core 2

De @ nblumhardt 's post :

Vous pouvez ensuite continuer et supprimer toute autre configuration de l'enregistreur qui traîne: il n'y a pas besoin d'une section "Journalisation" dans appsettings.json, pas AddLogging () n'importe où, et aucune configuration via ILoggerFactory dans Startup.cs.

Je reçois une exception lorsque using Serilog; Et ILogger dans mon contrôleur.

private readonly ILogger _logger;

public CustomersController(ILogger logger)
{
    _logger = logger;
}

Résulte en:

Une exception non gérée s'est produite lors du traitement de la demande.
InvalidOperationException: impossible de résoudre le service pour le type 'Serilog.ILogger' lors de la tentative d'activation de 'Customers.Api.Controllers.CustomersController'.

Aurais-je encore besoin de fournir des informations à DI dans la méthode Startup.ConfigureServices()?

Ma classe de programme, à ma connaissance, suit les instructions de la poste.

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateLogger();

        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog()
            .Build();
}
8
leon

Changer le type attendu de ILogger logger à ILogger<CustomersController> enregistreur:

private readonly ILogger _logger;

public CustomersController(ILogger<CustomersController> logger)
{
    _logger = logger;
}
6
Set

Si vous souhaitez toujours utiliser le propre ILogger de Serilog plutôt que le ILogger<T> D'ASP.NET Core, vous pouvez également enregistrer l'enregistreur Serilog avec votre conteneur IoC.

Il existe une intégration pour Autofac qui fait cela à https://github.com/nblumhardt/autofac-serilog-integration , d'autres conteneurs peuvent également avoir des packages d'intégration.

3
Nicholas Blumhardt