将 NLog.ILogger 转换为 Microsoft.Extensions.Logging
Convert NLog.ILogger to Microsoft.Extensions.Logging
我在我的解决方案中使用 NLog 作为日志提供程序,但一些项目已迁移到 Microsoft.Extensions.Logging。我们仍在评估是否将其余代码也迁移到此,但与此同时我们需要以某种方式将我们的 NLog.ILogger
实例转换为 Microsoft.Extensions.Logging.ILogger<T>
实例。
我知道使用 NLog.Extensions.Logging 包可以很容易地完成,添加 NLog 作为提供者:
ILoggerFactory factory = LoggerFactory.Create(builder =>
{
builder.AddNLog();
});
return factory.CreateLogger<MyClass>();
但这种方法实际上使用静态 NLog 内容创建了一个 NLog 提供程序,而不是我从其他代码部分收到的 NLog.ILogger
实例。
那么,有没有办法在这个转换中使用这个NLog.ILogger
实例呢?我错过了什么吗?
除非你使用独立的 NLog LogFactory-instances,否则你总是可以这样做:
AddLogging(new NLog.Extensions.Logging.NLogLoggerFactory());
并且您还可以将 NLogLoggerFactory
存储为静态单例,这样您就可以在任何地方重复使用它,直到每个人都转换为 dependency-injection。
但是如果你想让它漂亮(听起来它永远不会漂亮),那么可悲的是 NLog ILogger 有一个对 NLog LogFactory 的引用,所以你可以这样做:
NLog.ILogger nlogLogger = ??;
var nlogProvider = new NLog.Extensions.Logging.NLogLoggerProvider(nlogLogger.Factory);
var nlogFactory = new NLog.Extensions.Logging.NLogLoggerFactory(nlogProvider);
AddLogging(nlogFactory);
我在我的解决方案中使用 NLog 作为日志提供程序,但一些项目已迁移到 Microsoft.Extensions.Logging。我们仍在评估是否将其余代码也迁移到此,但与此同时我们需要以某种方式将我们的 NLog.ILogger
实例转换为 Microsoft.Extensions.Logging.ILogger<T>
实例。
我知道使用 NLog.Extensions.Logging 包可以很容易地完成,添加 NLog 作为提供者:
ILoggerFactory factory = LoggerFactory.Create(builder =>
{
builder.AddNLog();
});
return factory.CreateLogger<MyClass>();
但这种方法实际上使用静态 NLog 内容创建了一个 NLog 提供程序,而不是我从其他代码部分收到的 NLog.ILogger
实例。
那么,有没有办法在这个转换中使用这个NLog.ILogger
实例呢?我错过了什么吗?
除非你使用独立的 NLog LogFactory-instances,否则你总是可以这样做:
AddLogging(new NLog.Extensions.Logging.NLogLoggerFactory());
并且您还可以将 NLogLoggerFactory
存储为静态单例,这样您就可以在任何地方重复使用它,直到每个人都转换为 dependency-injection。
但是如果你想让它漂亮(听起来它永远不会漂亮),那么可悲的是 NLog ILogger 有一个对 NLog LogFactory 的引用,所以你可以这样做:
NLog.ILogger nlogLogger = ??;
var nlogProvider = new NLog.Extensions.Logging.NLogLoggerProvider(nlogLogger.Factory);
var nlogFactory = new NLog.Extensions.Logging.NLogLoggerFactory(nlogProvider);
AddLogging(nlogFactory);