如何配置WPF中使用EntityframeworkCore结合NLog进行日志输出的详细步骤?

2026-03-30 13:391阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计478个文字,预计阅读时间需要2分钟。

如何配置WPF中使用EntityframeworkCore结合NLog进行日志输出的详细步骤?

在使用EFcore时,由于不熟悉,经常遇到一些异常,不知如何排查。通常只能将EFcore的执行记录打印出来进行调试。实际上,通过这种方式简化了许多问题的调试过程。

官方网站提供了Asp.net Core与.net Core应用的配置信息,只需参考即可。

最近在用EFcore,由于不熟悉,经常出现一些异常都不知道如何排查,只能把EFcore的执行记录打印出来调查。确实简化了很多问题的调查。

官网提供了Asp.net Core与.net core 应用的配置,唯独没有WPF等应用的说明。本章作为一个补充,供各位参考。

由于我用的是Prism+PostgreSQL+Nlog,所有这里只讲述EntityframeworkCore的Nlog出力方法。

所需安装包

  • NLog
  • NLog.Extensions.Logging
  • Npgsql.EntityFrameworkCore.PostgreSQL

依赖注入设置

App.xaml.cs

protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterForNavigation<Login>(Authentication.LoginURL); containerRegistry.Register<ILoggerFactory, NLog.Extensions.Logging.NLogLoggerFactory>(); }

NLogLoggerFactory默认会创建一个新的NLogLoggerProvider。

NLog.config配置

这是个人喜欢的配置,仅供参考。

<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" autoReload="true"> <variable name="loglayout" value="${longdate}|${level:uppercase=true}|${message} ${exception:format=tostring}"/> <targets async="true"> <target name="infologfile" xsi:type="File" fileName="logs/Info.${shortdate}.log" layout="${loglayout}" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="debuglogfile" /> </rules> </nlog>

async="true"非同期更新日志。默认在exe执行文件夹下创建一个Logs文件夹存放日志。

如何配置WPF中使用EntityframeworkCore结合NLog进行日志输出的详细步骤?

DbContext配置

由于使用了DI,只需要在构造函数里面传入ILoggerFactory就可以。

public class PsqlDbContext : DbContext, IDbContext { private readonly ILoggerFactory _factory; public PsqlDbContext(ILoggerFactory loggerFactory) { _factory = loggerFactory; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseLoggerFactory(_factory) .EnableSensitiveDataLogging() .UseNpgsql("ProstgreSqlConnectStringxxxxx"); }

这样就设置完成了。

实例截图

执行了那些sql,执行超时时间都一目了然。

本文共计478个文字,预计阅读时间需要2分钟。

如何配置WPF中使用EntityframeworkCore结合NLog进行日志输出的详细步骤?

在使用EFcore时,由于不熟悉,经常遇到一些异常,不知如何排查。通常只能将EFcore的执行记录打印出来进行调试。实际上,通过这种方式简化了许多问题的调试过程。

官方网站提供了Asp.net Core与.net Core应用的配置信息,只需参考即可。

最近在用EFcore,由于不熟悉,经常出现一些异常都不知道如何排查,只能把EFcore的执行记录打印出来调查。确实简化了很多问题的调查。

官网提供了Asp.net Core与.net core 应用的配置,唯独没有WPF等应用的说明。本章作为一个补充,供各位参考。

由于我用的是Prism+PostgreSQL+Nlog,所有这里只讲述EntityframeworkCore的Nlog出力方法。

所需安装包

  • NLog
  • NLog.Extensions.Logging
  • Npgsql.EntityFrameworkCore.PostgreSQL

依赖注入设置

App.xaml.cs

protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterForNavigation<Login>(Authentication.LoginURL); containerRegistry.Register<ILoggerFactory, NLog.Extensions.Logging.NLogLoggerFactory>(); }

NLogLoggerFactory默认会创建一个新的NLogLoggerProvider。

NLog.config配置

这是个人喜欢的配置,仅供参考。

<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" autoReload="true"> <variable name="loglayout" value="${longdate}|${level:uppercase=true}|${message} ${exception:format=tostring}"/> <targets async="true"> <target name="infologfile" xsi:type="File" fileName="logs/Info.${shortdate}.log" layout="${loglayout}" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="debuglogfile" /> </rules> </nlog>

async="true"非同期更新日志。默认在exe执行文件夹下创建一个Logs文件夹存放日志。

如何配置WPF中使用EntityframeworkCore结合NLog进行日志输出的详细步骤?

DbContext配置

由于使用了DI,只需要在构造函数里面传入ILoggerFactory就可以。

public class PsqlDbContext : DbContext, IDbContext { private readonly ILoggerFactory _factory; public PsqlDbContext(ILoggerFactory loggerFactory) { _factory = loggerFactory; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseLoggerFactory(_factory) .EnableSensitiveDataLogging() .UseNpgsql("ProstgreSqlConnectStringxxxxx"); }

这样就设置完成了。

实例截图

执行了那些sql,执行超时时间都一目了然。