使用EF Core与Log4net记录SQL查询至日志文件遇问题求助
排查.NET Core EF 3.1 + log4net SQL日志为空的问题
我帮你梳理几个最可能遗漏的关键点,你可以逐一排查:
1. 确保log4net配置文件被正确加载并复制到输出目录
- 首先,要保证你的
log4net.config文件的复制到输出目录属性设置正确:右键文件 → 属性 → 复制到输出目录 → 选择「如果较新则复制」或者「始终复制」,不然运行时程序找不到配置文件。 - 在.NET Core中,还需要确保在日志配置中正确引入log4net,比如在
Program.cs里:public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); // 清除默认日志提供器,避免冲突 logging.AddLog4Net(); // 添加log4net提供器 }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
2. 配置EF Core的日志级别,确保SQL日志不被过滤
EF Core的SQL命令日志默认是Debug级别,但.NET Core默认会过滤掉Microsoft前缀的Debug日志。你需要在appsettings.json中明确开启EF Core的Debug日志:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.EntityFrameworkCore": "Debug" // 必须设置这一行,让EF的SQL日志能被捕获 } } }
3. 完善log4net配置,关联EF的特定Logger到Appender
你的log4net配置里只定义了Appender,但没有把它关联到EF Core的SQL日志Logger。EF的SQL命令日志来自Microsoft.EntityFrameworkCore.Database.Command这个Logger名称,你需要在log4net配置中添加对应的Logger节点:
<!-- 根Logger配置(可选,如果你想捕获所有Debug日志) --> <root> <level value="DEBUG" /> <appender-ref ref="logger" /> </root> <!-- 或者只针对EF的SQL日志配置,更精准 --> <logger name="Microsoft.EntityFrameworkCore.Database.Command" additivity="false"> <level value="DEBUG" /> <appender-ref ref="logger" /> </logger>
如果没有这个关联,即使有日志产生,也不会输出到你的文件Appender里。
4. 确认DBContext的LoggerFactory注入正确
检查你的DBContext构造函数是否正确注入了ILoggerFactory:
public YourDbContext(DbContextOptions<YourDbContext> options, ILoggerFactory loggerFactory) : base(options) { _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); }
另外,推荐在Startup.cs的ConfigureServices中直接配置DbContext时指定LoggerFactory,这样更可靠:
services.AddDbContext<YourDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("YourConnectionString")) .UseLoggerFactory(_loggerFactory));
5. 验证log4net的Filter配置
你的Filter设置只允许DEBUG级别,这和EF SQL日志的级别匹配,但如果前面的步骤没做好,日志根本不会到达log4net的Filter环节。可以先暂时注释掉Filter配置,测试是否有日志输出,再逐步调试。
内容的提问来源于stack exchange,提问作者Steve Cold
相关产品推荐
相关产品推荐

