Цель базы данных NLog и роль приложения SQL Server

Мы заменяем пользовательский "каркас" ведения журнала на 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

Однако это приводит к ошибке:

Роли приложения могут быть активированы только на специальном уровне.

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

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

1 ответ

Решение

В итоге мы создали собственную цель на основе (урезанной версии) исходного кода и кода NLog DatabaseTarget из этого поста в блоге.

Смотрите исходный код здесь.

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

Другие вопросы по тегам