NLog - Parámetros de tiempo de ejecución para el destino de base de datos

Estoy intentando agregar alguna personalización a mi destino de registro de base de datos. En mi NLog.config tengo esto:

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

Y en mi código C # tengo esto:

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);
}

Pero me aparece un error de SQL que dice "Debe declarar la variable escalar" @LogDate "".

Las propiedades están funcionando porque la conexión se realiza correctamente. Pero por alguna razón, los parámetros no están "vinculados" a las variables escalares en el comando.

Si creo los parámetros manualmente en el archivo NLog.config, funciona perfectamente:

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

Pero eso anula todo el propósito de poder personalizar los valores de texto y comando en tiempo de ejecución.

Ayúdeme a entender lo que debo hacer para que el objetivo recoja correctamente los valores de los parámetros. ¡Gracias!

actualizar

En general, quiero tener una forma de personalizar los objetivos a través del código C #. Quiero confiar en que el archivo NLog.config solo tiene todo lo necesario. Pero parece que NLog está bastante ligado a la configuración del archivo de configuración, y estoy tratando de trabajar dentro de esa restricción, pero ser lo más flexible posible. Con este objetivo de la base de datos, si puedo averiguar cómo actualizar los parámetros mediante programación, entonces puedo tener un objetivo bastante genérico en el archivo de configuración, luego actualizar las propiedades y los parámetros de LogEventInfo para que se adapten a las necesidades de cualquier base de datos para conectarse o almacenados Procedimiento a ejecutar.

Respuestas a la pregunta(1)

Su respuesta a la pregunta