如何使用NLog记录Entity Framework Core操作

6
我想使用NLog记录Entity Framework Core中的SQL查询,类似于WebApi Core的方式。我该如何设置?
1个回答

10

如果想要使用 Entity Framework Core 进行日志记录,可以参考这里的文档。

你需要做以下事情:(请查看文档)

public static readonly LoggerFactory MyLoggerFactory
    = new LoggerFactory(new[] {new ConsoleLoggerProvider((_, __) => true, true)});

使用来自https://www.nuget.org/packages/NLog.Extensions.Logging这个包的NLogLoggerProvider代替ConsoleLoggerProvider,例如:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
        .UseSqlServer(
            @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");

还需要加载您的 NLog 配置文件:

NLog.LogManager.LoadConfiguration("nlog.config");

当然,您需要一个nlog配置文件(nlog.config或可能在C#中),请查看https://github.com/NLog/NLog/wiki/Configuration-file
更新:根据评论运行良好 :)

1
我认为OP并不是在询问如何记录到数据库;我相信他们是在询问如何将Entity Framework数据库操作(即生成的SQL - https://learn.microsoft.com/en-us/ef/ef6/fundamentals/logging-and-interception)发送到NLog目标。我认为这就是答案->https://dev59.com/mqrka4cB1Zd3GeqPe4XB - Matthew
@Flashlight在https://dev59.com/mqrka4cB1Zd3GeqPe4XB中进行了回答。 - Matthew
1
@Matthew 这个代码没有记录到数据库里?我不知道你是从哪里看到的。此外,这个答案看起来很像你链接的那个答案 ;) - Julian
1
这个答案看起来对我来说是正确的。问题是如何将记录器链接到EF Core框架,而这个答案很好地回答了这个问题。简单的答案基本上是:步骤1:配置NLog。步骤2:optionsBuilder.UserLoggerFactory(new NLogLoggerFactory())但如果你这样做,你应该总是在这之前检查optionsBuilder.IsConfigured。否则,你会一直创建新的记录器工厂。 - Grungondola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接