将EntityFrameworkCore生成的SQL语句输出到控制台,使用hangfire
将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的更多相关文章
- ABP框架 将EntityFrameworkCore生成的SQL语句输出到控制台
首先 在 EntityFrameworkCore中安装 Microsoft.Extensions.Logging.Console nuget install Microsoft.Extensions. ...
- .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中
目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在 ...
- .net core 利用日志查看ef生成的SQL语句
EF Core 没有直接提供像 EF6 那样方便的在日志中记录最终生成的 SQL 的功能,可以通过官方提供的日志记录(Microsoft.Extensions.Logging)实现. 一. 使用 Mi ...
- 深入理解 LINQ to SQL 生成的 SQL 语句
Ø 简介 在 C# 中与数据交互最常用的语句就是 LINQ 了,而 LINQ to SQL 是最直接与数据库打交道的语句,它可以根据 LINQ 语法生成对应的 SQL 语句,在数据库中去执行.本文主 ...
- Console程序下监控EFCore生成的SQL语句!
最近这两天在使用控制台程序学习EFCore,突然想看看生成的SQL语句,所以在网上找到一位大神的分享的方法! 准备工作: 1). MySqlEFCore NuGet: Pomelo.EntityF ...
- EFCore常规操作生成的SQL语句一览
前言 EFCore的性能先不说,便捷性绝对是.Net Core平台下的ORM中最好用的,主要血统还百分百纯正. EFCore说到底还是对数据库进行操作,无论你是写Lamda还是Linq最后总归都是要生 ...
- 使用EntityFramework6.1的DbCommandInterceptor拦截生成的SQL语句
开始 EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以 ...
- 用LinqPad查看Nhibernate生成的sql语句
使用Nhibernate开发一般都要对Nhibernate生成的sql语句进行查看及分析,查看Nhibernate生成的sql语句,可以使用NHProfiler和log4net.但NHProfiler ...
- 【转】Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
原文链接:http://www.cnblogs.com/quanyongan/p/3152290.html 最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 ...
随机推荐
- dapi 基于Django的轻量级测试平台二 前端页面
QQ群: GitHub:https://github.com/yjlch1016/dapi 一.登录页login.html: 二.首页home.html: 三.产品线列表页product.html: ...
- VUE的element-ui的使用
我们在自己的网站当中有的时候会用到element-ui的组建 1.如何安装element-ui的组件 在命令行工具当中输入cnpm i element-ui -S, 等待安装 2.如何在vue当中使用 ...
- Godaddy ssl证书配置到nginx
打开终端,输入以下命令 openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr 生成过程会询问几个常见问 ...
- vue-cli3.0结合lib-flexible、px2rem实现移动端适配,完美解决第三方ui库样式变小问题
公司最近做的一个移动端项目从搭框架到前端开发由我独立完成,以前做移动端适配用的媒体查询,这次想用点别的适配方案,然后就采用了vue-cli3.0结合lib-flexible.px2rem实现移动端适配 ...
- flask实战-个人博客-视图函数
视图函数 在上面我们创建了所有必须的模型类.模板文件和表单类.经过程序规划和设计后,我们可以创建大部分视图函数.这些视图函数暂时没有实现具体功能,仅渲染对应的模板,或是重定向到其他视图.以blog蓝本 ...
- Helm 安装Kafka
helm镜像库配置 helm repo add stable http://mirror.azure.cn/kubernetes/charts helm repo add incubator http ...
- NOIP 2008 传球游戏
洛谷 P1057 传球游戏 洛谷传送门 JDOJ 1536: [NOIP2008]传球游戏 T3 JDOJ传送门 Description 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次, ...
- Pandas | 09 迭代
Pandas对象之间的基本迭代的行为取决于类型.当迭代一个系列时,它被视为数组式,基本迭代产生这些值.其他数据结构,如:DataFrame和Panel,遵循类似惯例,迭代对象的键. 简而言之,基本迭代 ...
- php+ajax无刷新分页原生ajax实现分页最简单完整实例-完整代码,
展示页面:index.html <html><script> function ajax_show() { // 获取当前页 var page =1; var xhr = ne ...
- 深入js系列-类型(显式强制转换)
什么是显式 这里的显式和隐式是以普遍的标准来进行讨论的,你能看出来是怎么回事,那么它对你是"显式",相反你不知道的话,对你就是"隐式" 抽象操作 字符串.数字. ...