如何配置Npgsql与EF Core以记录PostgreSQL的RAISE NOTICE日志
Npgsql 5 + EF Core 5 记录PostgreSQL RAISE NOTICE 配置方法
Npgsql默认不会将PostgreSQL的NOTICE消息转发到EF Core的日志体系,你需要完成以下两步配置:
步骤1:调整DbContext注册配置
在你的服务注册代码(通常是Startup.cs的ConfigureServices方法,或者.NET 5的Program.cs)中,修改DbContext的注册逻辑,启用Npgsql通知类日志的输出:
using Npgsql.Logging; // 注意需要引入该命名空间 services.AddDbContext<你的自定义DbContext类名>(options => options.UseNpgsql("你的数据库连接字符串", npgsqlOptions => { // 保留你原有的Npgsql配置,比如超时、重试策略等 }) // 配置日志规则,捕获Npgsql通知事件 .LogTo( filter: (category, level) => category == NpgsqlLoggerCategory.Database.Notification.Name && level == LogLevel.Information, level: LogLevel.Information ));
如果需要打印NOTICE携带的参数,可按需添加.EnableSensitiveDataLogging()配置,生产环境建议谨慎开启。
步骤2:更新appsettings.json日志配置
在已有的日志配置基础上,添加Npgsql相关类别的日志级别规则:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.EntityFrameworkCore": "Information", // 新增以下2条规则 "Npgsql": "Information", "Npgsql.Database.Notification": "Information" } } }
验证效果
完成上述配置后,执行包含RAISE NOTICE 'foo';的SQL语句时,你会在日志中看到类似以下的输出:
info: Npgsql.Database.Notification[0] NOTICE: foo
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

