Cómo registrar excepciones con objetivos de red en NLog

Estoy usando la NLog marco de registro y estoy tratando de obtener información de excepción y seguimiento de pila que aparece en cualquier aplicación de registrador UDP, comoCentinel y Log2Console, pero solo puede mostrar la parte del mensaje de registro. La salida a un archivo funciona bien, ya que la mayoría de los ejemplos lo hacen, por lo que el problema gira en torno al uso de objetivos de red con NLog.

Bonus si se puede aplicar un formato personalizado en excepciones internas y stacktrace, pero esto no es obligatorio. Exception.ToString () recorrería un largo camino.

Nota en el código de ejemplo: con Log2Console Encontré unaartícul sobre cómo enviar una excepción como una entrada de registro separada. Aunque esto funcionó, no estaba contento con la solución.

Ejemplo de código de registro de excepciones:

Logger Log = LogManager.GetCurrentClassLogger();

try
{
    throw new InvalidOperationException("My ex", new FileNotFoundException("My inner ex1", new AccessViolationException("Innermost ex")));
}
catch (Exception e)
{
    Log.ErrorException("TEST", e);
}

Ejemplo NLog.config:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<targets async="true">

    <!-- Send by UDP to Sentinel with NLogViewer protocol -->
    <target name="network" xsi:type="NLogViewer" address="udp://192.168.1.3:9999" layout="${message}${onexception:inner=${newline}${exception:format=tostring}}" />

    <!-- Send message by UDP to Log2Console with Chainsaw protocol -->
    <target name="network2" xsi:type="Chainsaw" address="udp://192.168.1.3:9998" appinfo="Grocelist"/>

    <!-- Send exception/stacktrace by UDP to Log2Console with generic network protocol -->
    <target name="network2ex" xsi:type="Network" address="udp4://192.168.1.3:9998" layout="${exception:format=ToString}" />

    <target name="logfile" xsi:type="File" layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=tostring}"
                createDirs="true"
                fileName="${basedir}/logs/${shortdate}.log"
                />
</targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="logfile" />
    <logger name="*" minlevel="Debug" writeTo="network" />
    <logger name="*" minlevel="Debug" writeTo="network2" />
    <logger name="*" minlevel="Warn" writeTo="network2ex" />
  </rules>
</nlog>

Algunos enlaces:

http: //nlog-project.orhttp: //nlog-project.org/wiki/Targethttp: //nlog-project.org/wiki/Exception_layout_renderehttp: //nlog-project.org/2011/04/20/exception-logging-enhancements.htmhttp: //nlog-project.org/wiki/How_to_properly_log_exceptions%3 ¿Cómo decirle a NLog que registre excepciones?https: //stackoverflow.com/a/9684111/13476http: //nlog-forum.1685105.n2.nabble.com/How-to-send-stacktrace-of-exceptions-to-Chainsaw-or-Log2Console-td5465045.htm

Editar Después de buscar un poco más, esto parece ser una limitación para el final de NLog. Aparentemente hay un parche reciente: log4jxmlevent no representa la excepción

Edit2: Reconstruí NLog con parche, pero no pareció ayudar en las aplicaciones Sentinel o Log2Console. Puede que tenga que probar log4net para asegurarme de que esas aplicaciones realmente admiten lo que estoy tratando de lograr.

Edit3: Actualmente uso string.Format () para unirme y formatear mensajes y mensajes de texto. Esto funciona bien, pero no es lo que estoy buscando aquí.

Respuestas a la pregunta(12)

Su respuesta a la pregunta