.net core 如何通过NLog记录实体框架核心操作

.net core 如何通过NLog记录实体框架核心操作,.net-core,entity-framework-core,nlog,entity-framework-core-2.1,.net Core,Entity Framework Core,Nlog,Entity Framework Core 2.1,我希望使用NLog以类似于WebApi核心的方式记录实体框架核心的SQL查询。如何设置它?对于实体框架核心的日志记录,有一些文档 你需要这个:(见文档) 公共静态只读日志工厂MyLoggerFactory =新LoggerFactory(新[]{new ConsoleLoggerProvider((u,uu)=>true,true)}); 并使用此软件包中的NLOGLogger提供程序而不是ConsoleLogger提供程序: 像这样的: protectedoverride void onco

我希望使用NLog以类似于WebApi核心的方式记录实体框架核心的SQL查询。如何设置它?

对于实体框架核心的日志记录,有一些文档

你需要这个:(见文档)

公共静态只读日志工厂MyLoggerFactory
=新LoggerFactory(新[]{new ConsoleLoggerProvider((u,uu)=>true,true)});
并使用此软件包中的
NLOGLogger提供程序
而不是
ConsoleLogger提供程序

像这样的:

protectedoverride void onconfiguration(DbContextOptionsBuilder optionsBuilder)
=>选项生成器
.UseLoggerFactory(MyLoggerFactory)//警告:不要每次都创建新的ILoggerFactory实例
.UseSqlServer(
@“服务器=(localdb)\mssqllocaldb;数据库=EFLogging;受信任的连接=True;ConnectRetryCount=0”);
您还需要加载NLog配置文件:

NLog.LogManager.LoadConfiguration(“NLog.config”);
当然,您需要一个nlog配置(nlog.config或可以是C#),请检查一下


更新:根据评论,效果很好:)

我不认为OP询问如何登录数据库;我相信他们在问如何发送实体框架数据库ops(即生成的SQL——它们自己发送到NLog目标。我相信这就是答案->@Flashlight在@Matthew中回答说这不是登录到数据库?不知道你在哪里看到的。而且这个答案看起来与你链接的答案很像;)这个答案在我看来是正确的。问题是如何将记录器链接到EF核心框架,这很好地解决了这个问题。简单的答案基本上是:步骤1:配置NLog。第2步:
optionsBuilder.UserLoggerFactory(新的NLogLoggerFactory())
但如果执行此操作,则应在执行此操作之前始终检查
optionsBuilder.IsConfigured
。否则,您将一直创建新的记录器工厂。