【问题标题】:How to configure logging for SQL for EFCore 2 in ASP.NET Core 2.0如何在 ASP.NET Core 2.0 中为 EFCore 2 的 SQL 配置日志记录
【发布时间】:2018-01-10 07:43:00
【问题描述】:

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

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 扩展方法的文档清楚地说:

设置将用于创建 ILoggerFactory 实例的 ILoggerFactory 用于此上下文完成的日志记录。永远不需要调用这个方法 因为 EF 可以自动获取或创建记录器工厂。

使用其中一种时无需调用此方法 'AddDbContext' 方法。'AddDbContext' 将确保 获取EF使用的Microsoft.Extensions.Logging.ILoggerFactory 来自应用服务提供商。

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

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

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

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

【问题讨论】:

    标签: asp.net-core-2.0 ef-core-2.0


    【解决方案1】:

    我将 .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();
    

    注意:

    我像您一样将 db 上下文添加到 DI,但我不需要此代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      相关资源
      最近更新 更多