我有一个 .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/