如何在NLog中记录网络目标的异常

ang*_*sen 8 networking exception nlog stack-trace sentinel

我正在使用NLog日志记录框架,我正在尝试获取异常和堆栈跟踪信息,这些信息显示在任何UDP记录器应用程序中,例如SentinelLog2Console,但只能显示日志消息部分.输出到文件的效果很好,因为大多数示例都是如此,因此问题围绕着使用NLog的网络目标.

如果自定义格式可以应用于内部异常和堆栈跟踪,则可以获得奖励,但这不是必需的.Exception.ToString()会有很长的路要走.

关于示例代码的注意事项:使用Log2Console,我发现了一篇关于如何将异常作为单独的日志条目发送的文章.虽然这很有效,但我对解决方案并不满意.

示例异常记录代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

示例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>
Run Code Online (Sandbox Code Playgroud)

一些链接:

编辑: 搜索了一些后,这似乎是对NLog结束的限制.最近有一个补丁显而易见:log4jxmlevent不会呈现异常

Edit2: 我用补丁重建了NLog,但它似乎没有在Sentinel或Log2Console应用程序中提供帮助.我可能不得不尝试使用log4net来确保这些应用确实支持我想要实现的目标.

Edit3: 我目前使用string.Format()来自己加入和格式化消息和异常文本.这很好用,但不是我在这里寻找的.

Sco*_*ott 1

您是否尝试过 Chainsaw 的最新开发者快照?它将显示堆栈跟踪并支持 log4net/UDP 附加程序,根据 NLog,您也可以使用它: http: //nlog-project.org/wiki/Chainsaw_target

尝试最新的开发人员快照,它有很多功能:http ://people.apache.org/~sdeboy