Подтвердить что ты не робот

Ninject logger с использованием NLog

Я только начал изучать Ninject, но столкнулся с проблемой с регистратором. В настоящее время у меня есть контроллер, у которого в конструктор введена служба и регистратор:

public ToolsController(IToolsService toolsService, ILogger logger)
{
    logger.Info("ToolsController Created");
    this.toolsService = toolsService;
    this.logger = logger;
}

Проблема заключается в строке logger.Info(например) в конструкторе, который, как представляется, использует неправильный регистратор, поэтому имя журнала, которое оно распечатывает, неверно.

Tools.IGeocodeImporter: ToolsController Created 

Ниже описано, как настроить имя журнала:

kernel.Bind<ILogger>().To<Logger>().WithConstructorArgument("name", x => x.Request.ParentContext.Request.Service.FullName);

Любые советы будут оценены.

4b9b3361

Ответ 1

Я использую следующее:

.Bind<ILog>().ToMethod(p => LogManager.GetLogger(
                   p.Request.Target.Member.DeclaringType));

Чтобы иметь регистратор с именем класса. Я использую Log4net, но я думаю, что идея может быть применена и к любому журналу: фактически привязка к методу открывает вам любое решение для создания необходимого экземпляра.

Ответ 2

Я использую расширение ninject под названием Ninject.Extensions.Logging.NLog2, которое можно найти на NuGet или GitHub. Он обрабатывает привязку NLog, поэтому вам не нужно ничего делать, кроме как добавить его в свой проект и удалить любые привязки к NLog, которые у вас есть прямо сейчас.