logging - 使用 NLog 进行依赖注入(inject)

标签 logging dependency-injection asp.net-core nlog

我有一个 .NET Core Web 应用程序,我正在尝试通过 NLog 添加日志记录。 在以前的项目中,我只是在每个类的顶部使用了类似以下内容:

private static Logger logger = LogManager.GetCurrentClassLogger();

我正在尝试尽可能在该项目中遵循更多最佳实践。

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

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

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

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

简化问题并使其更通用: 如何传入 .NET Core 将向其中注入(inject)类的类的名称?

我考虑过类似下面的事情,但不知道如何实现它:

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/

相关文章:

java - 基于国家/地区的 Spring Boot 依赖注入(inject)

asp.net-core - 将属性添加到 .net core 中 NLog 中的日志消息

asp.net-core - OData 和 .NET Core 2 Web API - 禁用区分大小写?

Spring Boot jetty/tomcat 内嵌访问日志配置

logging - 检测 powershell 中的注销和登录

MySQL快速检索每组中的最后一条记录

python - 登录类(class) - Python

javascript - 如何测试这种依赖性?

c# - 无法在存储库构造函数中创建服务范围 asp.net core

javascript - 如何将dom元素值传递给ajax请求(html.Pagedlist参数)