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

  • 相关阅读:
    深究递归和迭代的区别、联系、优缺点及实例对比
    提高Python运行效率的六个窍门
    C++设计模式——单例模式
    使用Python的turtle库实现七段数码管绘制
    Python 死循环和嵌套循环
    Python 随机数 random
    更改 pandas dataframe 中两列的位置
    Pandas中DataFrame修改列名
    MM 算法与 EM算法概述
    机器学习中的训练集、验证集和测试集
  • 原文地址:https://www.cnblogs.com/lixiaobin/p/postgresqlefcorenlog.html
Copyright © 2011-2022 走看看