Цель базы данных 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, но с функциями лихорадки.