【WPF】EntityframeworkCore NLog出力设置

  • 2019 年 10 月 13 日
  • 筆記

最近在用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="http://www.nlog-project.org/schemas/NLog.xsd"        xmlns:xsi="http://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文件夹存放日志。

 

 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,执行超时时间都一目了然。