我有一个.Net核心Web应用程序,试图通过NLog将日志添加到其中。
在以前的项目中,我在每堂课的顶部都使用了以下内容:

private static Logger logger = LogManager.GetCurrentClassLogger();


在可能的情况下,我试图在该项目中遵循更多的最佳实践。

我的问题是,如何注入一个具有要注入的类的完全限定名称的记录器?

到目前为止,在我的startup.cs文件中,我具有以下内容:

services.AddScoped<BLL.Logging.NLogLogger>();


目前,NLogLogger类通过GetCurrentClassLogger()创建一个NLog Logger的实例,使用该实例时,只会报告名称为“ BLL.Logging.NLogLogger”,而不是将记录器注入的实际类。 。

为了简化问题并使之更通用:
您如何传递.Net Core将注入类的类的名称?

我已经考虑过类似以下的内容,但不确定如何实现:

services.AddScoped<BLL.Logging.NLogLogger>(serviceProvider => new BLL.Logging.NLogLogger("class name here"));

最佳答案

使用DI指定ILogger<T>类型而不是Logger,其中T是使用记录器的类类型,因此NLog会知道该类。例如:

public class TodoController : Controller
{
    private readonly ILogger _logger;

    public TodoController(ILogger<TodoController> logger)
    {
        _logger = logger;
    }
}

关于logging - 使用NLog进行依赖注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41534253/

10-10 21:56
查看更多