将EntityFrameworkCore生成的SQL语句输出到控制台

参考文档如下

EF Core 日志记录要求使用一个或多个日志记录提供程序配置的 ILoggerFactory。

日志记录-EF Core | Microsoft Docs

安装适当的包后,应用程序应创建 Server.loggerfactory 的单一实例/全局实例。 例如,使用控制台记录器:

public static readonly ILoggerFactory MyLoggerFactory
= LoggerFactory.Create(builder => { builder.AddConsole(); });

然后,应该在 DbContextOptionsBuilder 上向 EF Core 注册此单一实例/全局实例。 例如:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");

筛选记录内容

应用程序可以通过在 ILoggerProvider 上配置筛选器来控制要记录的内容。 例如:

public static readonly ILoggerFactory MyLoggerFactory
= LoggerFactory.Create(builder =>
{
builder
.AddFilter((category, level) =>
category == DbLoggerCategory.Database.Command.Name
&& level == LogLevel.Information)
.AddConsole();
});

abp中使用

选择 *.EntityFrameworkCore 项目

找到 *DbContext

添加如下代码

        public static readonly ILoggerFactory MyLoggerFactory
= LoggerFactory.Create(builder =>
{
builder
.AddFilter((category, level) =>
category == DbLoggerCategory.Database.Command.Name
&& level == LogLevel.Information)
.AddConsole();
}); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLoggerFactory(MyLoggerFactory)
.EnableSensitiveDataLogging(true);

使用 Hangfire

添加nuget 包 Hangfire ...

getting-started Hangfire

  • 找到并修改 **HttpApiHostModule

    在 Startup.cs 直接进入
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp; namespace MyBookStore
{
public class Startup
{
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddApplication<MyBookStoreHttpApiHostModule>(options =>
{
options.UseAutofac();
}); return services.BuildServiceProviderFromFactory();
} public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
}
}
  • 添加使用的Configure
        private void ConfigureHangfire(ServiceConfigurationContext context, IConfigurationRoot Configuration)
{
// https://github.com/marcoCasamento/Hangfire.Redis.StackExchange
context.Services.AddHangfire(configuration =>
{
configuration.UseRedisStorage(Configuration["Redis:Configuration"]);
}); ////https://github.com/perrich/Hangfire.MemoryStorage
//context.Services.AddHangfire(config =>
//{
// config.UseMemoryStorage();
//}); // https://docs.hangfire.io/en/latest/getting-started/aspnet-core-applications.html
//// Add Hangfire services.
//context.Services.AddHangfire(configuration => configuration
// .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
// .UseSimpleAssemblyNameTypeSerializer()
// .UseRecommendedSerializerSettings()
// .UseSqlServerStorage(Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
// {
// CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
// SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
// QueuePollInterval = TimeSpan.Zero,
// UseRecommendedIsolationLevel = true,
// UsePageLocksOnDequeue = true,
// DisableGlobalLocks = true
// }));
// Add the processing server as IHostedService
context.Services.AddHangfireServer(); context.Services.AddTransient<HangfireService>();
}
  • 使用 Hangfire
    public class HangfireService
{
private readonly ILibraryService _service; public HangfireService(ILibraryService service)
{
_service = service;
} public async Task AddLibraryDto(LibraryDto model)
{
Console.WriteLine($"HangfireService 开始 在:{DateTime.Now.ToLongTimeString()} 启动");
await _service.AddLibraryDto(model);
Console.WriteLine($"HangfireService 结束 在:{DateTime.Now.ToLongTimeString()}");
} //private IServiceProvider serviceProvider { get; }
//public HangfireService(IServiceProvider _serviceProvider)
//{
// serviceProvider = _serviceProvider;
//}
//public async Task AddLibraryDto(LibraryDto model)
//{
// Console.WriteLine($"HangfireService 开始 在:{DateTime.Now.ToLongTimeString()} 启动");
// using (var serviceScope = serviceProvider.GetService<IServiceScopeFactory>().CreateScope())
// {
// var service = serviceScope.ServiceProvider.GetService<HangfireService>();
// await service.AddLibraryDto(model);
// }
// Console.WriteLine($"HangfireService 结束 在:{DateTime.Now.ToLongTimeString()}");
//}
}
  • test
        [HttpGet("AddLibrary")]
public async Task<LibraryDto> AddLibrary()
{
try
{
var watch = new Stopwatch();
watch.Start();//开始计时
Console.WriteLine($"LibraryController 开始 在:{DateTime.Now.ToLongTimeString()} 启动"); Thread.Sleep(1000);
var dto = new LibraryDto
{
Name = "添加一条",
Address = "1号"
};
var model = await _service.AddLibraryDto(dto); Console.WriteLine($"LibraryController 结束 在:{DateTime.Now.ToLongTimeString()}");
watch.Stop();//停止计时
Console.WriteLine("耗时:" + (watch.ElapsedMilliseconds));//输出时间 毫秒
var watch2 = new Stopwatch();
watch2.Start();//开始计时 for (var i = 0; i < 1000; i++)
{
BackgroundJob.Enqueue<HangfireService>(jobs => jobs.AddLibraryDto(model));
//var jobId = BackgroundJob.Enqueue(
// () => _hangfireService.AddLibraryDto(model));
} watch2.Stop();//停止计时
Console.WriteLine("hangfire 耗时:" + (watch2.ElapsedMilliseconds));//输出时间 毫秒
return model;
}
catch (Exception ex)
{
return new LibraryDto
{
Name = ex.Message
};
} }
  • 打开浏览器 localhost:*/hangfire

将EntityFrameworkCore生成的SQL语句输出到控制台,使用hangfire的更多相关文章

  1. ABP框架 将EntityFrameworkCore生成的SQL语句输出到控制台

    首先 在 EntityFrameworkCore中安装 Microsoft.Extensions.Logging.Console nuget install Microsoft.Extensions. ...

  2. .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中

    目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在 ...

  3. .net core 利用日志查看ef生成的SQL语句

    EF Core 没有直接提供像 EF6 那样方便的在日志中记录最终生成的 SQL 的功能,可以通过官方提供的日志记录(Microsoft.Extensions.Logging)实现. 一. 使用 Mi ...

  4. 深入理解 LINQ to SQL 生成的 SQL 语句

    Ø  简介 在 C# 中与数据交互最常用的语句就是 LINQ 了,而 LINQ to SQL 是最直接与数据库打交道的语句,它可以根据 LINQ 语法生成对应的 SQL 语句,在数据库中去执行.本文主 ...

  5. Console程序下监控EFCore生成的SQL语句!

    最近这两天在使用控制台程序学习EFCore,突然想看看生成的SQL语句,所以在网上找到一位大神的分享的方法! 准备工作: 1). MySqlEFCore NuGet:   Pomelo.EntityF ...

  6. EFCore常规操作生成的SQL语句一览

    前言 EFCore的性能先不说,便捷性绝对是.Net Core平台下的ORM中最好用的,主要血统还百分百纯正. EFCore说到底还是对数据库进行操作,无论你是写Lamda还是Linq最后总归都是要生 ...

  7. 使用EntityFramework6.1的DbCommandInterceptor拦截生成的SQL语句

    开始 EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以 ...

  8. 用LinqPad查看Nhibernate生成的sql语句

    使用Nhibernate开发一般都要对Nhibernate生成的sql语句进行查看及分析,查看Nhibernate生成的sql语句,可以使用NHProfiler和log4net.但NHProfiler ...

  9. 【转】Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句

    原文链接:http://www.cnblogs.com/quanyongan/p/3152290.html 最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和  ...

随机推荐

  1. 堆叠降噪自编码器SDAE

    https://blog.csdn.net/satlihui/article/details/81006906 https://blog.csdn.net/github_39611196/articl ...

  2. Linux用户环境配置文件

    用户操作环境配置文件: 从/etc/skel目录复制过来 .bashrc             打开新终端           /etc/bashrc .bash_profile       用户登 ...

  3. nginx日志设置

    环境:nginx1.16.1 (1)日志类型:access_log(访问日志) error_log(错误日志)rewrite_log 访问日志:通过访问日志我们可以得到用户的IP地址.浏览器的信息,请 ...

  4. Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core

    第一部分:本教程介绍如何在 IIS 服务器上托管 ASP.NET Core 应用. 官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutori ...

  5. POJ 3155Hard Life(最大密度子图)

    论文出处:最小割模型在信息学竞赛终的应用 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  6. 记录一次群答问:requests获取cookie

    问题: 为了测试,写的sever,下面仅为set cookie的部分代码 response = make_response('{"code":9420, "msg&quo ...

  7. C++中typedef和define的区别

    typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...

  8. C# XML封装

    /************************************************* * 描述: * * Author:yuanshuo@healthcare.cn * Date:20 ...

  9. Promise以及async和await的用法

    Promise是一个异步加载的方式,处理时使用new Promise返回一个对象,该对象可以调用then方法,then方法中有两个参数,第一个参数是加载成功时执行,第二个参数是加载失败时执行,then ...

  10. Python 的AES加密与解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...