No puedo decir que lo haya intentado, pero es posible que pueda usar un when filter y un condition para lograr lo que desea.
Aquí se muestra un ejemplo de la página de condition
:
<rules>
<logger name="*" writeTo="file">
<filters>
<when condition="length(message) > 100" action="Ignore" />
<when condition="equals('${logger}','MyApps.SomeClass')" action="Ignore" />
<when condition="(level >= LogLevel.Debug and contains(message,'PleaseDontLogThis')) or level==LogLevel.Warn" action="Ignore" />
<when condition="not starts-with('${message}','PleaseLogThis')" action="Ignore" />
</filters>
</logger>
</rules>
para lograr su objetivo, es posible hacer una filter
así:
<rules>
<logger name="*" writeTo="file">
<filters>
<when condition="length('${exception}') > 0" action="Log" />
</filters>
</logger>
</rules>
La idea es que sólo desea registrar el mensaje si la longitud de la cadena de excepción es> 0. Algunos de los ejemplos when condition
utilizaron la sintaxis NLog LayoutRenderer (por ejemplo, ${message}
) y algunos no (por ejemplo, message
). No estoy seguro de cuál es la correcta o qué sintaxis usar en qué situación. El ejemplo que publiqué directamente arriba puede hacer que los mensajes se registren SOLAMENTE si hay una excepción presente. También debe poder configurar que sus mensajes a un destino se registren "normalmente" y que los mensajes a su "ExceptionHoneypotTarget" se registren solo si hay una excepción presente.
Tal vez algo como esto:
<rules>
<logger name="*" writeTo="ExceptionHoneypot">
<filters>
<when condition="length('${exception}') > 0" action="Log" />
</filters>
</logger>
<logger name="*" writeTo="file">
</logger>
</rules>
Como ya he mencionado al principio, que no han intentado realmente nada de esto, pero parece que usted debería ser capaz de hacerlo, con suerte similar a lo mostrado anteriormente .
Alternativamente, podría usar un FilteringWrapper alrededor de su HoneypotTarget. La configuración puede ser algo como esto:
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="Honeypot" xsi:type="FilteringWrapper"
condition="length('${exception}')>0">
<target xsi:type="File" fileName="${basedir}/Honeypot.txt" />
</target>
<target name="normal" xsi:type="File" fileName="${basedir}/Log.txt" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="Honeypot,normal" />
</rules>
</nlog>
basé el ejemplo FilteringWrapper
en un ejemplo de desde here. La forma en que debería funcionar, si mi configuración es correcta, es que todos los mensajes se registrarán en "Log.txt" y los mensajes con una excepción no nula se registrarán en "Honeypot.txt".
Ah gran respuesta, gracias. –
Intenté esta solución, pero tuve que adjuntar $ {exception} en comillas simples como esta: length ('$ {exception}'). He enviado una nueva revisión para revisión por pares. –