Как заставить Log4Net работать с ASP.NET Ядро 3.1 с использованием внедрения зависимостей?

#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. Большое вам спасибо. Я знаю, что опаздываю, но это действительно очень помогло.