代码之家  ›  专栏  ›  技术社区  ›  Simon_Weaver

如何在ASP中为EFCore 2配置SQL日志记录。NET Core 2.0

  •  3
  • Simon_Weaver  · 技术社区  · 7 年前

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

    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使用的iLogger工厂 来自应用程序服务提供商。

    所以我似乎不应该使用它,因此我假设它会自动使用我在这里配置的任何东西:

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

    但是它没有。如果我只在此处配置“全局”日志记录,则不会向控制台输出任何内容。

    在ASP下登录EFCore 2的正确方法是什么。净核心2?

    1 回复  |  直到 7 年前
        1
  •  2
  •   aydow    6 年前

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

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

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

    在节目中。cs I导入此

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

    并在构建webhost时传递它

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

    注:

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

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