2

我们正在现有应用程序中用 NLog 替换自定义日志记录“框架”。问题是应用程序使用 SQL Server 应用程序角色,这意味着每次打开到 SQL Server 的连接时,它都会执行sp_setapprole存储过程。

我们尝试在数据库目标配置中模拟这种行为:

<commandText>
  exec sp_setapprole @roleName, @password; --first, set app. role
  INSERT dbo.Log --etc.
</commandText>
<parameter name="@roleName" value="...">
<parameter name="@password" value="...">
-- other logging parameters follow

但是,这会产生错误:

应用程序角色只能在 ad hoc 级别激活。

我宁愿避免编写自己的目标,因为数据库目标可以做我需要的一切,除了设置应用程序角色。所以我希望有可能以某种方式连接到由 NLog 在内部创建的连接的 StateChange 事件,或者做一些其他的技巧。

TL;DR - 通过 NLog 数据库目标记录时如何切换到应用程序角色?

4

1 回答 1

1

我们最终基于NLog DatabaseTarget 源代码(精简版)和这篇博文中的代码创建了自己的目标。

在此处查看源代码

目标的配置方式(大致)与 NLog 数据库目标相同,但具有发烧特性。

于 2013-07-23T08:47:01.167 回答