#asp.net-core #dependencies #log4net #code-injection
#asp.net-ядро #зависимости #log4net #внедрение кода
Вопрос:
Я пытаюсь использовать log4Net в ASP.NET Приложение Core 3.1, и я пытаюсь заставить его работать с внедрением зависимостей с помощью контроллеров. Я успешно могу использовать Log4Net с помощью LogManager.GetLogger(type)
. Любая помощь будет признательна.
Вот пример кода, который я сейчас использую для ведения журнала:
public class HomeController : Controller
{
private static readonly log4net.ILog _log = LogManager.GetLogger(typeof(Logger));
public HomeController()
{
_log.Debug("Test");
}
}
Ответ №1:
Любые службы, которые вы хотите внедрить в контроллер, должны быть зарегистрированы в Startup.ConfigureServices(IServiceCollection)
(Startup.cs) или в Program.CreateHostBuilder(string [])
(Program.cs), обычно после CreateDefaultBuilder
и ConfigurWebHostDefaults
.
Вы можете зарегистрировать услугу, используя следующее:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => /* ... */)
.ConfigureLogging(builder =>
{ // Configuration here:
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddLog4Net("log4net.config");
});
Затем вы можете ввести, используя Microsoft.Extensions.Logging.ILogger<T>
(где T
регистрируется класс), который будет использовать Log4Net:
public class HomeController : Controller {
private readonly ILogger<HomeController> _log;
// A suitable logger instance is created by the runtime DI:
public HomeController(ILogger<HomeController> log)
{
_log = log;
_log.Debug("Test");
}
}
Для получения дополнительной информации, вот учебное пособие.
Комментарии:
1. Большое вам спасибо. Я знаю, что опаздываю, но это действительно очень помогло.