既存のアプリケーションのカスタム ロギング「フレームワーク」を 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
ただし、これによりエラーが発生します。
データベース ターゲットは、アプリケーション ロールの設定を除いて、必要なことはすべて実行できるため、独自のターゲットを作成することは避けたいと思います。したがって、NLogによって内部的に作成された接続のStateChangeイベントに何らかの方法で接続したり、他のトリックを実行したりできることを願っています。
TL;DR - NLog データベース ターゲット経由でログを記録するときにアプリケーション ロールに切り替えるにはどうすればよいですか?