Как регистрировать исключения с сетевыми целями в NLog

Я используюNLog каркас журналирования, и я пытаюсь получить информацию об исключениях и трассировке стека в любом приложении UDP-регистратора, напримерчасовой а такжеLog2Console, но может отображать только часть сообщения журнала. Вывод в файл работает хорошо, так как большинство примеров делают именно это, поэтому проблема заключается в использовании сетевых целей с 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);
}

Пример 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>

Некоторые ссылки:

http://nlog-project.orghttp://nlog-project.org/wiki/Targetshttp://nlog-project.org/wiki/Exception_layout_rendererhttp://nlog-project.org/2011/04/20/exception-logging-enhancements.htmlhttp://nlog-project.org/wiki/How_to_properly_log_exceptions%3FКак заставить NLog регистрировать исключения?https://stackoverflow.com/a/9684111/134761http://nlog-forum.1685105.n2.nabble.com/How-to-send-stacktrace-of-exceptions-to-Chainsaw-or-Log2Console-td5465045.html

Редактировать: Поиски еще немного, это кажется ограничением в конце NLog. Недавно появился патч:log4jxmlevent не отображает исключение

Edit2: Я перестроил NLog с патчем, но он не помог в приложениях Sentinel или Log2Console. Возможно, мне придется попробовать log4net, чтобы убедиться, что эти приложения действительно поддерживают то, чего я пытаюсь достичь.

Edit3: В настоящее время я использую string.Format (), чтобы присоединиться и отформатировать текст сообщения и исключения самостоятельно. Это работает хорошо, но это не то, что я ищу здесь.

Ответы на вопрос(6)

Ваш ответ на вопрос