gpt4 book ai didi

asp.net-core-2.0 - 如何在 ASP.NET Core 2.0 中为 EFCore 2 配置 SQL 日志记录

转载 作者:行者123 更新时间:2023-12-03 23:39:11 25 4
gpt4 key购买 nike

我知道这听起来像是一个非常愚蠢的问题,但我被卡住了。

Entity Framework > Entity Framework Core > Misc > Logging页面(顺便说一下,自 2016 年 11 月以来未更新)它告诉您执行以下操作:

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");

果然,如果我执行以下操作(将上面的内容调整为 ConfigureServices 方法),我确实会在每个命令运行时将 SQL 输出到控制台/调试控制台:

services.AddDbContext<MyStoreContext>(options =>
{
options.UseSqlServer(connection);
options.UseLoggerFactory(new LoggerFactory().AddConsole().AddDebug());
});

然而 UseLoggerFactory 的文档扩展方法清楚地说:

Sets the ILoggerFactory that will be used to create ILoggerFactory instances for logging done by this context. It is never necessary to call this method since EF can obtain or create a logger factory automatically.

There is no need to call this method when using one of the 'AddDbContext' methods.'AddDbContext' will ensure that the Microsoft.Extensions.Logging.ILoggerFactory used by EF is obtained from the application service provider.

看来我不应该使用它,因此我假设它会自动使用我在此处配置的任何内容:

services.AddLogging(options =>
{
options.AddDebug();
options.AddConsole();
}

然而事实并非如此。如果我只在此处配置“全局”日志记录,这不会向控制台输出任何内容。

在 ASP.NET Core 2 下登录 EFCore 2 的正确方法是什么?

最佳答案

我将 .net core 2.1 与 sdk 2.1.1 一起使用,我让它以这种方式与 2 个不同的数据库提供程序(mysql 和 oracle)一起工作。

我的文件 appsettings.json 具有以下配置:

{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Debug"
}
},
"Console": {
"LogLevel": {
"Default": "Debug"
}
}
}
}

我在 Program.cs 中导入这个

var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddCommandLine(args)
.Build();

并在构建虚拟主机时传递它

WebHost.CreateDefaultBuilder()
.UseConfiguration(config)
.Build();

注意:

我像您一样将数据库上下文添加到 DI,但我不需要这段代码:

services.AddLogging(options =>
{
options.AddDebug();
options.AddConsole();
}

关于asp.net-core-2.0 - 如何在 ASP.NET Core 2.0 中为 EFCore 2 配置 SQL 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48182494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com