[EDIT]
Tal vez una solución más evidente que lo que propongo a continuación sería cambiar el uso de una instrucción INSERT a la utilización de un procedimiento de base de datos para iniciar la sesión. Si utiliza un procedimiento de base de datos, entonces puede manejar el swizzling de cadena vacía para anular usted mismo. No estoy seguro de que pueda usar un procedimiento de base de datos con el objetivo de base de datos de NLog. Log4net lo admite, así que supongo que NLog también lo hace.
Aquí hay un ejemplo (en la respuesta a la pregunta relacionada) que encontré de la configuración de alguien que usaba NLog para iniciar sesión en una base de datos usando el procedimiento almacenado.
http://nlog-forum.1685105.n2.nabble.com/Using-a-stored-procedure-for-the-DB-Target-td2621725.html
que ver aquí:
http://nlog.codeplex.com/workitem/5418
Una queja que no funciona (al menos en la beta Nlog 2.0).
Una diferencia entre los dos ejemplos es que el ejemplo de trabajo utiliza "LoggingProcedureName ejecutivo ...", mientras que el que no trabaja utiliza "LoggingProcedureName ..."
Espero que esto ayude.
[Edit End]
no puedo comentar por qué Nlog escribe cadenas emptry en lugar de nulo o cómo hacer Nlog nula escritura en lugar de cadenas vacías, pero me pregunto si usted podría hacer este trabajo que la forma que querer a través de configuración adicional?
¿Cuándo son opcionales los parámetros de registro? ¿Hay ciertos lugares en su código donde SIEMPRE registra algunos valores y otros lugares donde NUNCA registra algunos valores? ¿Puede usted (como desarrollador) saber qué parámetros opcionales son aplicables en qué secciones de su aplicación?
¿Podría configurar múltiples destinos de base de datos, cada uno con los parámetros "correctos" especificados? A continuación, puede apuntar a los registradores al destino específico de la base de datos que sea apropiado para la ubicación del código.
Supongamos que su aplicación está dividida (por espacio de nombres) en código que (generalmente) ejecuta "antes", "durante" y "después".
En el código "anterior", es posible que esté registrando el parámetro A. En el código "during", es posible que esté registrando el parámetro B. En el código "after", es posible que esté registrando el parámetro C.Por lo tanto, su mesa de registro podría tener columnas como:
DateTime, Logger, LogLevel, A, B, C, Message, Exception
Ahora usted tienen un destino de base de datos que inserta todos esos valores para cada declaración de registro.
¿Qué pasa si usted tiene tres objetivos de bases de datos que se insertan los valores de este modo:
DataTime, Logger, LogLevel, A, Message, Exception
DataTime, Logger, LogLevel, B, Message, Exception
DataTime, Logger, LogLevel, C, Message, Exception
Se puede configurar la sección de algo como esto:
<rules>
<logger name="Before.*" minlevel="Trace" writeTo="databaseA" />
<logger name="During.*" minlevel="Trace" writeTo="databaseB" />
<logger name="After.*" minlevel="Trace" writeTo="databaseC" />
</rules>
Obviamente, podría haber varios problemas con este idea:
Es posible (o fácil) dividir su logge rs hasta coincidir con la "opcionalidad" de los parámetros.
Puede haber demasiadas combinaciones de parámetros opcionales para que esto sea factible (probablemente el mismo inconveniente que 1).
Puede que no sea una buena idea tener un registro de objetivos de base de datos activos al mismo tiempo. Tal vez esto llevaría a problemas de rendimiento.
Bueno, eso es todo lo que tengo. No sé si mi idea funcionaría, y mucho menos si es práctica.
Probablemente, la mejor solución sería que NLog permitiera una propiedad adicional en cada parámetro de base de datos que le permitiera decir "enviar nulo en lugar de cadena vacía".
Supongo que debería sugerir que también desee formular esta pregunta en el NLog forum. "Craig" en ese foro hizo la misma pregunta (o similar) el día de hoy. Tal vez eres Craig.
Soy el usuario de Craig en los foros. Gracias por las ideas, ya estoy usando un procedimiento almacenado para mis objetivos de base de datos de nlog, por lo que es probable que busque las cadenas vacías en los parámetros entrantes y escriba nulo, solo buscaba las alternativas que me ha proporcionado, gracias para las opciones. – cweston