Я пытаюсь найти способ регистрации log4net ILog в IServiceCollection
сервисах (.NET Core 2.1).
log4net LogManager предоставляет метод, который принимает тип в качестве параметра, чтобы его можно было использовать прирегистрация событий.Вот пример вызова:
var log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Однако, регистрируя его с помощью служб в методе запуска, я могу использовать фабричный преобразователь, но все равно тип будет всегда одинаковым.Смотрите следующий отрывок:
private void SetServices(IServiceCollection services)
{
services.AddTransient(svc => CreateLog(MethodBase.GetCurrentMethod().DeclaringType)).;
}
protected ILog CreateLog(Type type)
{
return LogManager.GetLogger(type);
}
Я ожидал, что svc (IServiceProvider) предоставит несколько способов добраться до фактически разрешаемого типа, но, похоже, ничего не происходит.Также использование отражения не поможет (IMO, но я могу ошибаться), потому что ILog активируется перед вызовом разрешенного типа ctor.
Но, возможно, есть какое-либо расширение на стороне MS или log4net, которое поможет решитьименованный регистратор, как объяснено в начале?
Это все, чтобы избежать использования статических членов ILog в любом классе, который использует средства ведения журнала и вместо этого использует внедрение зависимостей.
Спасибо, Радек