ABP增加记录EFCore 生成数据库脚本日志到新的txt文件

由于EFCore并没直接生成脚本到txt文件,故而自己画了点时间把实现记录下来,方便给大家参考。

0.安装Microsoft.Extensions.Logging.Debug,我这里是2.1.1版本。

1.新建一个EFCoreDatabaseCmdLog在abp的Core层下,

using Abp.Dependency;
using Castle.Core.Logging;

namespace SensorBroker.Log
{
    public static class EFCoreDatabaseCmdLog
    {
        public static ILogger Logger { get; private set; }

        static EFCoreDatabaseCmdLog()
        {
            Logger = IocManager.Instance.IsRegistered(typeof(ILoggerFactory))
                ? IocManager.Instance.Resolve<ILoggerFactory>().Create(typeof(EFCoreDatabaseCmdLog))
                : NullLogger.Instance;
        }
        public static void Debug(string logContent)
        {
            Logger.Debug(logContent);
        }
    }
}

 2.在abp.EntityFrameworkCore层EntityFrameworkCore文件夹下新增2个文件EFLoggerProvider.cs与EFLogger.cs

EFLogger.cs

using Microsoft.Extensions.Logging;
using System;

namespace SensorBroker.EntityFrameworkCore
{
    public class EFLogger : ILogger
    {
        private readonly string categoryName;

        public EFLogger(string categoryName) => this.categoryName = categoryName;

        public bool IsEnabled(LogLevel logLevel) => true;

        public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
        {
            //ef core执行数据库查询时的categoryName为Microsoft.EntityFrameworkCore.Database.Command,日志级别为Information
            if (categoryName == "Microsoft.EntityFrameworkCore.Database.Command"
                    && logLevel == LogLevel.Information)
            {
                var logContent = formatter(state, exception);
                XXXXX.Log.EFCoreDatabaseCmdLog.Debug(logContent);//xxxx 需要替换成自己的项目名字
            }
        }

        public IDisposable BeginScope<TState>(TState state) => null;
    }
}

  EFLoggerProvider

using Microsoft.Extensions.Logging;

namespace SensorBroker.EntityFrameworkCore
{
    public class EFLoggerProvider : ILoggerProvider
    {
        public ILogger CreateLogger(string categoryName) => new EFLogger(categoryName);
        public void Dispose() { }
    }
}

3.修改SensorBrokerDbContextConfigurer.cs文件如下,我这里用的是mysql,请酌情参考。

using System.Data.Common;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;

namespace SensorBroker.EntityFrameworkCore
{
    public static class SensorBrokerDbContextConfigurer
    {
        public static void Configure(DbContextOptionsBuilder<SensorBrokerDbContext> builder, string connectionString)
        {
            var loggerFactory = new LoggerFactory();
            loggerFactory.AddProvider(new EFLoggerProvider());
            builder.UseMySql(connectionString);
            builder.UseLoggerFactory(loggerFactory);
            builder.EnableSensitiveDataLogging();
        }

        public static void Configure(DbContextOptionsBuilder<SensorBrokerDbContext> builder, DbConnection connection)
        {
            var loggerFactory = new LoggerFactory();
            loggerFactory.AddProvider(new EFLoggerProvider());
            builder.UseMySql(connection);
            builder.UseLoggerFactory(loggerFactory);
            builder.EnableSensitiveDataLogging();
        }
    }
}

4.修改配置log4net.config

在log4net节点中增加如下配置

<appender name="EntityFrameworkCoreDatabaseCommandLogFile" type="log4net.Appender.RollingFileAppender" >
    <file value="App_Data/Logs/EFLogs.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10000KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
    </layout>
  </appender>
  <logger name="SensorBroker.Log.EFCoreDatabaseCmdLog" additivity="false">
    <level value="ALL"/>
    <!--如果想增加日志输出目的地,增加<appender-ref>节点就是了,注意后面的ref是在config中配置的appender name-->
    <appender-ref ref="EntityFrameworkCoreDatabaseCommandLogFile" />
  </logger>

 这样所有的数据库脚本日志都就会到EFLogs.txt中。

原文地址:https://www.cnblogs.com/guaicaiboshi/p/11612464.html

时间: 2024-10-12 11:36:21

ABP增加记录EFCore 生成数据库脚本日志到新的txt文件的相关文章

记录—JPA生成数据库表

环境 springBoot+JPA+MySQL application-dev.yml 注意:配置中的blog数据库需要先创建,否则启动springBoot会报错 1 spring: 2 #数据库连接配置 3 datasource: 4 driver-class-name: com.mysql.jdbc.Driver 5 url: jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8 6 username

Visor 应用之一 通过ER 设计生成数据库脚本和实体对象

前言 Visor(http://www.visor.com.cn)   是一个基于HTML5 Canvas 开发的IDE 框架和设计开发平台,有关Visor的设计架构和技术应用,在以后的文章里会逐渐跟大家分享,今天主要是分享一下它的数据库设计功能和SQL生成功能.在众多的软件项目里面,权限管理基本上都是必备的,看到有网友甚至为权限管理单独做了一套框架,目的都是为了很快的应用到不同的项目里面,减少开发的成本.本人也做过很多类似的工作,不论多好的框架都只能解决80%的用户,总有20%的用户会让你花8

利用spring batch 读取数据库中的数据写入到txt文件中

写一个job,其配置文件为: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:batch="http://www.springfram

adb logcat 通过包名过滤日志并输出到txt文件

最近学使用ADB命令抓包APP闪退的日志: 1)在cmd命令行中可以使用adb logcat 命令查看android系统的log,也可以使用adb shell进入到adb shell专用命令行 2)dos窗口可以直接输入log,或定向输出到txt文件: 3)按ctrl+c中断输入log记录: android输出的每一条日志都有一个标记和优先级与其关联. 优先级是下面的字符,顺序是从低到高: V - 明细 verbose(最低优先级) D - 调试 debug I - 信息 info W - 警告

SQL Server 2008数据库生成数据库脚本(并带数据)

1.选定数据库.任务.生成脚本,下一步,下一步,显示“生成和发布脚本”页面,点击“高级(A)”按钮,在“高级脚本编写选项”中将“要编写的脚本的数据的类型”的属性值改为“架构和数据”,确定.回到“生成和发布脚本”页面,选择保存路径,下一步.下一步即可

php dump mysql 数据库,生成数据库脚本

<?PHP function db_dump($host,$user,$pwd,$db) { $mysqlconlink = mysql_connect($host,$user,$pwd , true); if (!$mysqlconlink) echo sprintf('No MySQL connection: %s',mysql_error())."<br/>"; mysql_set_charset( 'utf8', $mysqlconlink ); $mysql

osql执行数据库查询命令并保存到txt文件

osql -Usa -P123 -d AppBox -Q "select * from Menus where sortindex > 1000" -o e:\xxx.txt osql -Usa -P123 -dAppBox -Q "insert into Menus (Name,ImageUrl,NavigateUrl,Remark,SortIndex,ParentID,ViewPowerID) values('系统管理','~/res/icon/applicatio

power designer pdm生成sql脚本和数据库

今天使用PowerDesigner生成数据库脚本和直接生成数据库.所以简短的记一下. 1,老师给的pdm文件,打开如下(可以理解为概念数据模型) 2 ,  将"概念数据模型"设计的表转换为"物理数据模型"(Physical Data Model),实际上是从"概要设计"转换为"详细设计",即对表的具体实现.将概要设计模板转换为物理设计 选择"Tools"-->"Generate Physic

【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp

一.本人环境描述      1.oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0      2.Linux为centos6.5 32位,安装在Oracle VM VirtualBox虚拟机上      3.win7上装有ftp服务 二.功能实现描述      用shell的crontab命令定时执行某个.sh文件,此文件的功能已实现生成oracle表的数据到本地txt文件,并上传到ftp,必要时可记录执行日志. 三.步骤      1.在centos中安装orac