ロギングはずっとlog4netを使っていたのですが、さすがにこれ以上何も発展は無さそうなので、今後はNLogを使ってみようなどと考えています。
NLog
と言うことで、表題の通りスタックトレースを出力する設定例。あれこれ検索しつつ、ある程度思ったようなレイアウトになったのでメモ。2.0から追加されたonexceptionで無用な改行とか押さえられる感じに。
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- See http://nlog-project.org/wiki/Configuration_file for information on customizing logging rules and outputs. --> <targets> <!-- add your targets here --> <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${level:uppercase=true}	[${callsite}] ${message} ${onexception: ${newline} ${exception:format=Message, Type, ToString:separator=*}}" header="[${longdate}: ${processname} Start.]" footer="[${longdate}: End.]"/> </targets> <rules> <!-- add your logging rules here --> <logger name="*" minlevel="Trace" writeTo="f" /> </rules> </nlog>
これで以下のような出力結果になります。
2013-10-09 16:36:46.9526 INFO [TestService1.LogOut.<.ctor>b__0] **** Log Start *** 2013-10-09 16:36:46.9526 ERROR [TestService1.Service1.OnStart] 無効な URI: 無効なポートが指定されています。 無効な URI: 無効なポートが指定されています。*System.UriFormatException*System.UriFormatException: 無効な URI: 無効なポートが指定されています。 場所 System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) 場所 System.Uri..ctor(String uriString, UriKind uriKind) 場所 System.Web.Http.SelfHost.HttpSelfHostConfiguration.CreateBaseAddress(String baseAddress) 場所 System.Web.Http.SelfHost.HttpSelfHostConfiguration..ctor(String baseAddress) 場所 TestService1.Service1.OnStart(String[] args) 場所 c:\Users\jptais1\Documents\Visual Studio 2012\Projects\ProcessHost\TestService1\Service1.cs:行 38
ちなみにNLogでは上のスタックトレース情報のようなExceptionオブジェクトをログに書き出す場合には、通常のメッセージだけの出力とは別の[Level]Exception(exp. ErrorException())メソッドを使用するので間違いないようにしましょう。
コメント