.net - Dapper 和 Postgres - 打印查询
问题描述
我将 Dapper 与 Postgres 一起使用,我想记录一些诊断信息,尤其是正在运行的实际查询。
如果我使用的是 SQL Server,我会这样做
let connection = new SqlConnection(connectionString)
connection.StatisticsEnabled = true
// run query
let stats = connection.RetrieveStatistics()
但我似乎找不到类似的东西NpgsqlConnection
。
检索正在运行的实际查询的最佳方法是NpgsqlConnection
什么?
解决方案
我可以通过创建 NpgSql 日志记录提供程序来打印查询,如此处所述。
type SqlLogger (logger: ILogger) =
inherit NpgsqlLogger() with
let mapLogLevel level =
match level with
| NpgsqlLogLevel.Trace -> LogLevel.Debug
| NpgsqlLogLevel.Debug -> LogLevel.Debug
| NpgsqlLogLevel.Info -> LogLevel.Information
| NpgsqlLogLevel.Warn -> LogLevel.Warning
| NpgsqlLogLevel.Error -> LogLevel.Error
| NpgsqlLogLevel.Fatal -> LogLevel.Critical
| _ -> LogLevel.Debug
override __.IsEnabled(_level : NpgsqlLogLevel) = true
override __.Log(level, connectorId, msg, ex) =
let level = mapLogLevel level
logger.Log(level, ex, msg)
type SqlLoggerProvider (loggerFactory: ILoggerFactory ) =
member __.loggerFactory = loggerFactory
interface INpgsqlLoggingProvider with
member __.CreateLogger(name) = loggerFactory.CreateLogger(name) |> SqlLogger :> NpgsqlLogger
然后像这样注册它:
let configureApp (app : IApplicationBuilder) =
NpgsqlLogManager.Provider <- SqlLoggerProvider (app.ApplicationServices.GetService<ILoggerFactory>())
NpgsqlLogManager.IsParameterLoggingEnabled <- true
推荐阅读
- vb.net - 在 .NET 上使用 ffplay / ffmpeg 播放 ogg 文件
- reactjs - Error: useRoutes() may be used only in the context of a
component - r - 从闪亮的列表中绘制 dygraph
- docker - Docker BuildX 图像未在 docker image ls 中显示
- python - 导入类时的 ImportError
- php - ORA-28547 在 docker 容器中使用 php-fpm
- python - 尝试使用 Discord.py 使整个语音通道静音
- amazon-web-services - 记录对 DynamoDB 的所有请求
- c# - 在 Controller 中的所有参数中返回 null
- javascript - 是否有必要散列 REST API 令牌?