Ste*_*bob 8 logging dependency-injection nlog asp.net-core
我有一个.Net核心Web应用程序,我正在尝试通过NLog添加日志记录.在以前的项目中,我刚刚在每个类的顶部使用了类似下面的内容:
private static Logger logger = LogManager.GetCurrentClassLogger();
Run Code Online (Sandbox Code Playgroud)
我试图在可能的情况下遵循这个项目的更多最佳实践.
我的问题是,如何注入一个记录器,它具有被注入的类的完全限定名称?
在我的startup.cs文件中,到目前为止我有以下内容:
services.AddScoped<BLL.Logging.NLogLogger>();
Run Code Online (Sandbox Code Playgroud)
目前,NLogLogger该类创建了一个NLog Logger的实例GetCurrentClassLogger(),当使用它时,它只会将名称报告为"BLL.Logging.NLogLogger"而不是记录器注入的实际类.
为了简化问题并使其更具通用性:如何传递.Net Core将要注入类的类的名称?
我已经考虑过类似下面的内容,但不知道如何实现它:
services.AddScoped<BLL.Logging.NLogLogger>(serviceProvider => new BLL.Logging.NLogLogger("class name here"));
Run Code Online (Sandbox Code Playgroud)
使用DI指定ILogger<T>类型而不是Logger,其中T是使用记录器的类类型,因此NLog将知道该类.例如:
public class TodoController : Controller
{
private readonly ILogger _logger;
public TodoController(ILogger<TodoController> logger)
{
_logger = logger;
}
}
Run Code Online (Sandbox Code Playgroud)
我想我已经找到了一个可以接受的解决方案,虽然不完全是我问这个问题的方式.
首先,我创建了一个"LoggerFactory",它有一个名为"GetLogger"的方法(它创建具体的NLog Logger并接受一个类名作为参数),我直接注入这个工厂而不是记录器.
的LoggerFactory:
public class LoggerFactory : ILoggerFactory
{
public ILogger GetLogger(string fullyQualifiedClassName)
{
return new NLogLogger(fullyQualifiedClassName);
}
}
Run Code Online (Sandbox Code Playgroud)
NLogLogger:
public class NLogLogger : ILogger, INLogLogger
{
NLog.Logger mylogger;
public NLogLogger(string fullyQualifiedClassName)
{
mylogger = NLog.LogManager.GetLogger(fullyQualifiedClassName);
}
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs:
services.AddScoped<BLL.Logging.ILoggerFactory>();
Run Code Online (Sandbox Code Playgroud)
在我的控制器类中,我得到了:
private BLL.Logging.ILogger logger;//my NLogLogger inherits this interface
public HomeController(BLL.Logging.ILoggerFactory loggerFactory)
{
logger = loggerFactory.GetLogger(this.GetType().FullName);
}
Run Code Online (Sandbox Code Playgroud)
所以我现在已经有效地完成了,而不是注入实际的Logger本身(@Steven表示不可能像我尝试的那样),我已经注入了实用程序来创建一个logger实例包裹NLog.
我仍然有责任在类中创建记录器,但至少我已经与底层日志框架(NLog)分离.
| 归档时间: |
|
| 查看次数: |
9953 次 |
| 最近记录: |