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, чтобы они соответствовали потребностям любой базы данных для подключения или сохранения. процедура для выполнения.

Ответы на вопрос(1)

Ваш ответ на вопрос