zoukankan      html  css  js  c++  java
  • 【WPF】EntityframeworkCore NLog出力设置

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

  • 相关阅读:
    javascirpt Scoket
    黑马程序员面试题(一)交通灯管理系统
    中软国际实习总结
    黑马程序员Java基础正则表达式
    黑马程序员Java基础加强Java高新技术
    黑马程序员JAVA基础GUI
    面试题(二)银行业务调度系统
    黑马程序员JAVA基础IO流之File 类
    黑马程序员JAVA基础IO流其他类
    黑马程序员Java基础网络编程
  • 原文地址:https://www.cnblogs.com/lixiaobin/p/postgresqlefcorenlog.html
Copyright © 2011-2022 走看看