NLogロギング フレームワークを使用しており、 SentinelやLog2Consoleなどの UDP ロガー アプリケーションに表示される例外およびスタック トレース情報を取得しようとしていますが、表示されるログ メッセージ部分しか取得できません。ファイルへの出力は、ほとんどの例と同じようにうまく機能するため、問題は 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.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
- 例外をログに記録するように NLog に指示する方法は?
- 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
編集: さらに検索した後、これはNLogの終わりの制限のようです。最近のパッチが出ているようです: log4jxmlevent は例外をレンダリングしません
Edit2: NLog をパッチで再構築しましたが、Sentinel または Log2Console アプリでは役に立たないようです。これらのアプリが私が達成しようとしているものを実際にサポートしていることを確認するために、log4net を試す必要があるかもしれません。
Edit3: 私は現在 string.Format() を使用して、メッセージと例外テキストを自分で結合してフォーマットします。これはうまく機能しますが、ここで探しているものではありません。