NLog - параметры времени выполнения для целевой базы данных
Я пытаюсь добавить некоторые настройки для своей цели журнала базы данных. В моем NLog.config у меня есть это:
<target name="DatabaseExample1" xsi:type="Database"
dbProvider="System.Data.SqlClient"
dbDatabase="${event-context:item=dbDatabase}"
dbUserName="${event-context:item=dbUserName}"
dbPassword="${event-context:item=dbPassword}"
dbHost="${event-context:item=dbHost}"
commandText="${event-context:item=commandText}">
</target>
И в моем коде C # у меня есть это:
protected override void updateBeforeLog(LogEventInfo info)
{
info.Properties["dbDatabase"] = "TempDB";
info.Properties["dbUserName"] = "username";
info.Properties["dbPassword"] = "password";
info.Properties["dbHost"] = "SERVER\\SQLSERVER";
info.Properties["commandText"] = "exec InsertLog @LogDate, @LogLevel, @Location, @Message";
info.Parameters = new DatabaseParameterInfo[] {
new DatabaseParameterInfo("@LogDate", Layout.FromString("${date:format=yyyy\\-MM\\-dd HH\\:mm\\:ss.fff}")),
new DatabaseParameterInfo("@LogLevel", Layout.FromString("${level}")),
new DatabaseParameterInfo("@Location", Layout.FromString("${event-context:item=location}")),
new DatabaseParameterInfo("@Message", Layout.FromString("${event-context:item=shortmessage}"))
};
log.Log(info);
}
Но я получаю ошибку SQL, которая гласит: «Должен объявить скалярную переменную« @LogDate »».
Свойства работают, потому что соединение успешно. Но по какой-то причине параметры не являются «привязанными» к скалярным переменным в команде.
Если я создаю параметры вручную в файле NLog.config, он отлично работает:
<target name="DatabaseExample1" xsi:type="Database"
dbProvider="System.Data.SqlClient"
dbDatabase="${event-context:item=dbDatabase}"
dbUserName="${event-context:item=dbUserName}"
dbPassword="${event-context:item=dbPassword}"
dbHost="${event-context:item=dbHost}"
commandText="${event-context:item=commandText}">
<parameter name="@LogDate" layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff}" />
<parameter name="@LogLevel" layout="${level}" />
<parameter name="@Location" layout="${event-context:item=location}" />
<parameter name="@Message" layout="${event-context:item=shortmessage}" />
</target>
Но это противоречит самой цели возможности настраивать значение commandText и параметров во время выполнения.
Пожалуйста, помогите мне понять, что мне нужно сделать, чтобы цель правильно подобрала значения для параметров. Спасибо!
Обновить
В целом, я хочу иметь способ настроить цели с помощью кода C #. Я хочу положиться на файл NLog.config только столько, сколько нужно. Но похоже, что NLog довольно сильно привязан к настройкам конфигурационного файла, и я пытаюсь работать в рамках этого ограничения, но будьте максимально гибкими. С помощью этой цели базы данных, если я могу выяснить, как программно обновить параметры, тогда у меня может быть довольно общая цель в файле конфигурации, а затем обновить свойства и параметры LogEventInfo, чтобы они соответствовали потребностям любой базы данных для подключения или сохранения. процедура для выполнения.