Sto utilizzando il framework di registrazione NLog e sto cercando di ottenere informazioni di eccezione e stacktrace in qualsiasi applicazione di logger UDP, come Sentinel e Log2Console, ma posso ottenere solo la parte di messaggio di registro visualizzato. L'output in un file funziona bene, dato che la maggior parte degli esempi fa proprio questo, quindi il problema ruota attorno all'utilizzo di target di rete con NLog.Come registrare eccezioni con destinazioni di rete in NLog
Bonus se un formato personalizzato può essere applicato su eccezioni interne e stacktrace, ma questo non è richiesto. Exception.ToString() farebbe molto.
Nota sul codice di esempio: Con Log2Console ho trovato un article su come inviare un'eccezione come voce di registro separata. Sebbene funzionasse, non ero soddisfatto della soluzione.
Esempio codice di registrazione eccezione:
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);
}
Esempio 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>
Alcuni link:
- http://nlog-project.org
- http://nlog-project.org/wiki/Targets
- http://nlog-project.org/wiki/Exception_layout_renderer
- http://nlog-project.org/2011/04/20/exception-logging-enhancements.html
- http://nlog-project.org/wiki/How_to_properly_log_exceptions%3F
- How to tell NLog to log exceptions?
- https://stackoverflow.com/a/9684111/134761
- http://nlog-forum.1685105.n2.nabble.com/How-to-send-stacktrace-of-exceptions-to-Chainsaw-or-Log2Console-td5465045.html
Modifica: Dopo aver cercato un po 'di più questo sembra essere un limite alla fine di NLog. Una recente patch è apparentemente là fuori: log4jxmlevent does not render Exception
Edit2: Ho ricostruito NLog con la patch, ma non sembrano aiutare nella Sentinel o Log2Console applicazioni. Potrei dover provare log4net per assicurarmi che quelle app supportino realmente quello che sto cercando di ottenere.
Edit3: Attualmente uso string.Format() di aderire e Formato messaggio e l'eccezione me stesso testo. Funziona bene, ma non è quello che sto cercando qui.
Il codice sorgente per NLogViewerTarget su Github mostra che il set di layout {} non è operativo, quindi non è possibile sovrascrivere il valore predefinito che non include le eccezioni. –