使用NLog的Ninject记录器

我刚开始学习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().To().WithConstructorArgument("name", x => x.Request.ParentContext.Request.Service.FullName); 

任何意见,将不胜感激。

我使用以下内容:

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

使记录器具有类的名称。 我正在使用Log4net,但我认为这个想法也可以应用于任何日志:实际上绑定到一个方法可以打开任何解决方案以创建所需的实例。

我使用了一个名为Ninject.Extensions.Logging.NLog2的ninject扩展,它可以在NuGet或GitHub上找到 。 它处理NLog的绑定,因此您不必做任何其他事情,只需将其添加到您的项目并删除您现在拥有的任何NLog绑定。

正如Felice所说,你可以使用相同的方法,但对于Nlog,你需要做一点改动,即:

 .Bind().ToMethod(p => NLog.LogManager.GetCurrentClassLogger( p.Request.Target.Member.DeclaringType));