NLogでスタックトレースをテキストのログへ出力するNLog.configの設定例

ロギングはずっと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}&#009;[${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())メソッドを使用するので間違いないようにしましょう。

コメントを残す