2013-07-22 3 views
2

Мы заменяем пользовательскую «фреймворк» регистрации в NLog в существующем приложении. Проблема заключается в том, что приложение использует роли приложения SQL Server, а это означает, что каждый раз, когда он открывает соединение с SQL Server, он выполняет команду sp_setapprole sproc.Объект базы данных NLog и роль приложения SQL Server

Мы пытались имитировать это поведение в целевой базе данных конфигурации:

<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.

Я предпочел бы не писать свою собственную цель, так как базы данных target может делать все, что мне нужно, кроме установка роли приложения. Поэтому я надеюсь, что возможно каким-то образом подключиться к событию StateChange, которое создается NLog внутри или сделать некоторые другие трюки.

TL; DR - Как переключиться на роль приложения при регистрации через целевую базу данных NLog?

ответ

1

Мы создали собственную цель, основанную на (обрезанной версии) NLog DatabaseTarget source и код от this blog post.

See source code here.

Цель сконфигурирована (примерно) так же, как целевая база данных NLog, хотя с функциями лихорадки.