You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET 7控制台应用中配置Serilog记录EF Core查询?

配置.NET 7控制台应用的AppDbContext以用Serilog记录数据库查询

步骤1:注册Serilog的ILoggerFactory到依赖注入

你已注册ILogger,但EF Core需要ILoggerFactory处理日志,需补充以下注册代码:

var logger = new LoggerConfiguration().ReadFrom.Configuration(config).CreateLogger();

services.AddSingleton<ILogger>(logger);
// 注册Serilog的LoggerFactory到DI
services.AddSingleton<ILoggerFactory>(sp => new SerilogLoggerFactory(logger));

步骤2:配置AppDbContext使用Serilog日志

在注册AppDbContext时,通过UseLoggerFactory指定使用Serilog日志工厂,同时开启EF Core命令日志支持:

services.AddDbContext<AppDbContext>(options =>
{
    // 替换为你的数据库提供者(如UseSqlite、UseNpgsql等)
    options.UseSqlServer("你的数据库连接字符串")
           // 从DI获取Serilog的LoggerFactory
           .UseLoggerFactory(serviceProvider => serviceProvider.GetRequiredService<ILoggerFactory>())
           // 【可选,仅开发环境】开启敏感数据日志,记录查询参数的实际值
           .EnableSensitiveDataLogging();
});

若你的AppDbContext通过构造函数接收DbContextOptions,也可在OnConfiguring方法中配置(推荐优先使用上面的DI注册方式):

public class AppDbContext : DbContext
{
    private readonly ILoggerFactory _loggerFactory;

    public AppDbContext(DbContextOptions<AppDbContext> options, ILoggerFactory loggerFactory)
        : base(options)
    {
        _loggerFactory = loggerFactory;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer("你的数据库连接字符串")
                          .UseLoggerFactory(_loggerFactory)
                          .EnableSensitiveDataLogging();
        }
    }

    // 定义你的DbSet
    public DbSet<YourEntity> YourEntities { get; set; }
}

步骤3:调整Serilog配置,开启EF Core命令日志

在配置文件(如appsettings.json)中,需覆盖EF Core命令日志的级别——默认Microsoft类别日志级别为Warning,而EF查询日志属于Microsoft.EntityFrameworkCore.Database.Command类别,级别为Information:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        // 关键:开启EF Core数据库命令的日志记录
        "Microsoft.EntityFrameworkCore.Database.Command": "Information"
      }
    },
    // 你的Serilog输出配置(如控制台、文件输出等)
    "WriteTo": [
      { "Name": "Console" }
    ]
  }
}

注意事项

  • EnableSensitiveDataLogging仅在开发环境使用,生产环境开启可能泄露敏感数据(如用户密码、个人信息等)。
  • 确保已安装对应数据库提供者的NuGet包(如Microsoft.EntityFrameworkCore.SqlServer)。

内容的提问来源于stack exchange,提问作者imba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:38:23