Ответ 1
Попробуйте сделать следующее в вашем контроллере.
ILogger<HomeController> logger = null;
public HomeController(ILogger<HomeController> _logger)
{
logger = _logger;
}
Я пытаюсь реализовать SeriLog в основном приложении ASP.NET(.NET Framework)
Ниже приведены шаги, которые я выполнил так far-
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) Добавлены следующие строки в конструктор вашего запуска class-
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "log-{Date}.txt"))
.CreateLogger();
3) Добавлена следующая строка в метод конфигурации вашего запуска 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 sp, тип Type, тип requiredBy, логическое значение isDefaultParameterRequired)
в lambda_method (Закрытие, IServiceProvider, Object []) в Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance [TInstance] (IServiceProvider serviceProvider, Тип реализации типа) в Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerActivator.Create(ControllerContext controllerContext) в Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController(ControllerContext контекст) в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__26.MoveNext()
Может ли кто-нибудь помочь мне в этом? Какие-либо настройки отсутствуют для Serilog?
Попробуйте сделать следующее в вашем контроллере.
ILogger<HomeController> logger = null;
public HomeController(ILogger<HomeController> _logger)
{
logger = _logger;
}
Я получил эту проблему "не удалось разрешить службу для типа" имя_интерфейса "при попытке активировать" имя_контроллера "....
Добавив следующую строку в файле startup.cs, я решил то же самое: services.AddScoped();
Вы пропустили внедрение интерфейса в конструктор контроллера:
ILogger<HomeController> logger = null;
public HomeController(ILogger<HomeController> _logger)
{
logger = _logger;
}
В Program.cs вы также должны добавить UseSerilog:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog();