在我的解决方案中,我使用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实例?我是不是遗漏了什么?
发布于 2022-05-19 17:02:07
除非您使用的是孤立的NLog LogFactory-实例,否则始终可以这样做:
AddLogging(new NLog.Extensions.Logging.NLogLoggerFactory());您还可以将NLogLoggerFactory存储为静态单例,这样就可以在任何地方重用它,直到每个人都转换成依赖项注入。
但是,如果您想使它变得漂亮(听起来似乎永远都不会),那么可悲的是,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);https://stackoverflow.com/questions/72285243
复制相似问题