首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将NLog.ILogger转换为Microsoft.Extensions.Logging

将NLog.ILogger转换为Microsoft.Extensions.Logging
EN

Stack Overflow用户
提问于 2022-05-18 07:56:56
回答 1查看 470关注 0票数 2

在我的解决方案中,我使用NLog作为日志服务提供者,但是有些项目已经迁移到Microsoft.Extensions.Logging。我们仍然在评估是否也迁移了其余的代码,但与此同时,我们需要以某种方式将我们的NLog.ILogger实例转换为Microsoft.Extensions.Logging.ILogger<T>实例。

我知道使用NLog.Extensions.Logging包可以很容易地做到这一点,并将NLog添加为提供者:

代码语言:javascript
复制
ILoggerFactory factory = LoggerFactory.Create(builder =>
{
    builder.AddNLog();
});
return factory.CreateLogger<MyClass>();

但是,这种方法实际上使用静态NLog提供程序创建了一个NLog提供程序,而不是从其他代码部分接收到的NLog.ILogger实例。

那么,是否有一种方法在此转换中使用此NLog.ILogger实例?我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-19 17:02:07

除非您使用的是孤立的NLog LogFactory-实例,否则始终可以这样做:

代码语言:javascript
复制
AddLogging(new NLog.Extensions.Logging.NLogLoggerFactory());

您还可以将NLogLoggerFactory存储为静态单例,这样就可以在任何地方重用它,直到每个人都转换成依赖项注入。

但是,如果您想使它变得漂亮(听起来似乎永远都不会),那么可悲的是,NLog ILogger有一个对NLog LogFactory的引用,所以您可以这样做:

代码语言:javascript
复制
NLog.ILogger nlogLogger = ??;
var nlogProvider = new NLog.Extensions.Logging.NLogLoggerProvider(nlogLogger.Factory);
var nlogFactory = new NLog.Extensions.Logging.NLogLoggerFactory(nlogProvider);
AddLogging(nlogFactory);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72285243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档