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);
Любые советы будут оценены.
Ответы
Ответ 1
Я использую следующее:
.Bind<ILog>().ToMethod(p => LogManager.GetLogger(
p.Request.Target.Member.DeclaringType));
Чтобы иметь регистратор с именем класса. Я использую Log4net, но я думаю, что идея может быть применена и к любому журналу: фактически привязка к методу открывает вам любое решение для создания необходимого экземпляра.
Ответ 2
Я использую расширение ninject под названием Ninject.Extensions.Logging.NLog2, которое можно найти на NuGet или GitHub. Он обрабатывает привязку NLog, поэтому вам не нужно ничего делать, кроме как добавить его в свой проект и удалить любые привязки к NLog, которые у вас есть прямо сейчас.