J'essaie d'implémenter SeriLog dans l'application principale ASP.NET (.NET Framework)
Voici les étapes que j'ai effectuées jusqu'à présent
1) Ajout des références ci-dessous dans Project.json
"Serilog": "2.2.0",
"Serilog.Extensions.Logging": "1.2.0",
"Serilog.Sinks.RollingFile": "2.0.0",
"Serilog.Sinks.File": "3.0.0"
2) Ajout des lignes suivantes au constructeur de votre classe de démarrage -
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "log-{Date}.txt"))
.CreateLogger();
3) Ajout de la ligne suivante à la méthode configure de votre classe de démarrage -
loggerFactory.AddSerilog();
4) Injecter l'enregistreur à HomeController comme ceci-
ILogger logger;
public HomeController(ILogger logger)
{
this.logger = logger;
}
5) Dans l'action À propos, essayez de consigner une exception comme celle-ci-
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
try
{
throw new Exception("Serilog Testing");
}
catch (System.Exception ex)
{
this.logger.Error(ex.Message);
}
return View();
}
En exécutant mon application, j'obtiens en dessous de l'erreur-
System.InvalidOperationException: impossible de résoudre le service pour le type "Serilog.ILogger" lors de la tentative d'activation de "AspNetCore_SeriLog_trial1.Controllers.HomeController". sur Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
chez lambda_method (Closure, IServiceProvider, Object []) chez Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance [TInstance] (IServiceProvider serviceProvider, Type implementationType) chez Microsoft.AspNetCore.Mvc.Controllers.DefaultController.Default (ControllerContext controllerContext) sur Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController (contexte ControllerContext) sur Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__26.MoveNext ()
Quelqu'un pourrait-il m'aider à ce sujet? Une configuration manquante pour Serilog?
Essayez de faire la chose suivante dans votre contrôleur.
ILogger<HomeController> logger = null;
public HomeController(ILogger<HomeController> _logger)
{
logger = _logger;
}
Vous avez manqué d'injecter votre interface dans le constructeur du contrôleur:
ILogger<HomeController> logger = null;
public HomeController(ILogger<HomeController> _logger)
{
logger = _logger;
}
Dans le Program.cs, vous devez également ajouter UseSerilog:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog();
J'obtenais ce problème "impossible de résoudre le service pour le type" nom_interface "en essayant d'activer" Nom_contrôleur "....
En ajoutant la ligne ci-dessous dans startup.cs, j'ai résolu le même problème: services.AddScoped ();