2016-11-20 6 views
7

Я пытаюсь реализовать SeriLog в базовом приложении ASP.NET (.NET Framework)Решение об ошибке - Не удалось разрешить услугу типа «Serilog.ILogger»

Ниже шаги я выполнил так далеко

1) Добавлены ссылки ниже в 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) Добавлены следующие строки в конструкторе Startup class-

Log.Logger = new LoggerConfiguration() 
      .MinimumLevel.Debug() 
      .WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "log-{Date}.txt")) 
      .CreateLogger(); 

3) Добавлено следующую строку в метод настройки вашего Startup class-

loggerFactory.AddSerilog(); 

4) Впрыскивание логгер HomeController как this-

ILogger logger; 

    public HomeController(ILogger logger) 
    { 
     this.logger = logger; 
    } 

5) В О действии, пытаясь войти исключение как this-

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

о запуске моего приложения, я получаю ниже error-

System.InvalidOperationException: Не удается разрешить услугу типа 'Serilog.ILogger' при попытке активировать 'AspNetCore_SeriLog_trial1.Controllers.HomeController'. на Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider зр, тип тип, тип requiredBy, булева isDefaultParameterRequired)
на lambda_method (Закрытие, IServiceProvider, Object []) в Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache. CreateInstance [TInstance] (IServiceProvider ServiceProvider, Тип ImplementationType) при Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerActivator.Create (controllerContext controllerContext) при Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController (controllerContext контекста) при Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__26.MoveNext()

Может ли кто-нибудь помочь мне в этом? Любая конфигурация отсутствует для Serilog?

ответ

12

Попробуйте сделать следующее в своем контроллере.

ILogger<HomeController> logger = null; 
    public HomeController(ILogger<HomeController> _logger) 
    { 
     logger = _logger; 
    } 
+0

Я попытался это, но получаю ошибку - 'Error \t CS0308 \t Не-универсальный тип«ILogger»не может быть использован с типом arguments' – Sanket

+2

вы используете интерфейс ILogger Сери попробуйте заменить его на интерфейс ILogger корпорации Майкрософт, присутствует в библиотеке регистрации. – dotnetstep