gpt4 book ai didi

c# - ServiceStack OrmLite - 从存储过程中捕获 Sql InfoMessage 事件

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:00 24 4
gpt4 key购买 nike

几天前问过这个问题,但可能不太具体。

基本上,我正在编写一个控制台应用程序,它接受存储过程名称列表并任意执行它们。该应用程序应该将这些存储过程的进度记录到 Slack 等,并在以后做一些其他事情。

我提到的“其他东西”与已知的数据库模型交互,并且由于我们构建了一个 ServiceStack/OrmLite 类型的库,我稍后将使用 OrmLite 与数据库交互。

因此,由于我在项目中包含并配置了 OrmLite,我只是使用 OrmLite IDbConnection 来执行存储过程,即使它只是按名称。 sprocs 只是将数据移动到另一个数据库,应用程序不需要与之交互的数据库 - 所以我没有 SELECT 使用 sprocs 将任何数据输入应用程序并且没有 POCO 表示什么被移动了。

但是,sproc 会吐出一些信息性的 PRINT 语句,我想通过 Slack 以格式化的方式捕获并记录到我们的团队。为此,启用完整的调试日志记录会吐出太多信息。

有什么方法可以配置 Ormlite SqlServerDialect.ProviderIDataReader 等来基本捕获 SqlConnection.InfoMessage事件(或为其提供一个已准备好 SqlInfoMessageEventHandler 的连接)?

最佳答案

执行此操作的日志记录策略方法是在您的日志记录提供程序中配置一个过滤器,以仅记录您感兴趣的消息。

包含 SQL 和 DB 参数的 OrmLite 的 SQL 调试日志消息记录在 ServiceStack.OrmLite.OrmLiteResultsFilterExtensions 类型下。

为了简化此场景,我刚刚添加了新的 OrmLiteConfig.BeforeExecFilterOrmLiteConfig.AfterExecFilter,您可以使用它们在 DB 命令之前和之后执行自定义逻辑执行,例如:

OrmLiteConfig.BeforeExecFilter = dbCmd => Console.WriteLine(dbCmd.GetDebugString());

此更改从现在的 v5.0.3 开始可用 available on MyGet .

关于c# - ServiceStack OrmLite - 从存储过程中捕获 Sql InfoMessage 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49905167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com