EF Core无法查看查询日志?Serilog配置问题求助
解决EF Core SQL日志无法通过Serilog打印的问题
精准指定EF Core日志分类的级别
当前配置仅全局覆盖了Microsoft的日志级别,但EF Core的SQL执行日志归属更具体的Microsoft.EntityFrameworkCore.Database.Command分类,需要单独配置:var host = Host.CreateDefaultBuilder() .ConfigureServices((context, collection) => ServerServiceCollection.AddServices(collection, context.Configuration)) .UseSerilog((hostContext, _, logger) => logger.ReadFrom.Configuration(hostContext.Configuration) .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) // 全局Microsoft类日志设为Warning减少冗余 .MinimumLevel.Override("Microsoft.EntityFrameworkCore.Database.Command", LogEventLevel.Information)) // 单独开启SQL执行日志级别 .Build();注:
Information级别已足够捕获EF Core的SQL执行日志,无需使用Verbose(会输出大量冗余调试信息)。检查Serilog配置文件的输出规则
确保appsettings.json中的Serilog配置包含正确的输出模板,且未过滤目标日志:"Serilog": { "WriteTo": [ { "Name": "Console", "Args": { "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" } } ], "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "Microsoft.EntityFrameworkCore.Database.Command": "Information" } } }建议将代码中的日志级别配置与配置文件统一,避免规则冲突。
确认EF Core上下文未禁用日志
检查DbContext的配置代码,确保未调用禁用日志的方法:protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 确保没有调用DisableLogging() optionsBuilder.UseSqlServer("your_connection_string"); }若通过DI注册DbContext,同样要确保未禁用日志:
services.AddDbContext<YourDbContext>(options => options.UseSqlServer(configuration.GetConnectionString("Default")));验证日志输出目标有效性
确认Serilog的输出目标(如控制台、文件等)正常工作,排查是否存在日志已生成但未输出到指定位置的情况(比如文件输出路径错误、权限不足)。
内容的提问来源于stack exchange,提问作者user5405648
相关产品推荐
相关产品推荐

