我们正在取代自定义日志记录"框架"在现有应用程序中使用NLog。麻烦的是应用程序使用SQL Server应用程序角色,这意味着每次打开与SQL Server的连接时,它都会执行sp_setapprole
sproc。
我们已尝试在数据库目标配置中模拟此行为:
<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
然而,这会产生错误:
Application roles can only be activated at the ad hoc level.
我宁愿避免编写自己的目标,因为数据库目标可以完成我需要的所有工作,除了设置应用程序角色。所以我希望能够以某种方式连接NLog内部创建的连接的StateChange事件或做其他一些技巧。
TL; DR - 如何通过NLog数据库目标进行日志记录时切换到应用程序角色?
答案 0 :(得分:1)
我们最终根据({3}}的修剪版本和NLog DatabaseTarget source的代码创建了我们自己的目标。
目标的配置方式(大致)与NLog数据库目标相同,但具有发烧功能。