2012年9月30日日曜日

[C#] NLog

http://news.mynavi.jp/articles/2010/03/19/nlog/index.html

ログの出力には log4net を使っていたのだけどこういうのもあったんだー
log4netに比べて導入がかんたん!と書いてある。


NuGet の Package Manager Consoleからインストールした

こんな感じでコマンド打った
http://nuget.org/packages/NLog 

PM> Install-Package NLog

これだけでインストール完了
便利!!



VisualStudioのプロジェクトに、
NLogの設定ファイルであるところの NLog.config ファイルを追加する。


設定ファイル(NLog.config )のおれおれサンプル

<?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">

  <!--(1)出力先(ターゲット)の設定-->
  <targets>
    <!--ファイル(100KByte毎ローテーション)-->
    <target name="file" xsi:type="File" fileName="${basedir}/logs/log.txt"
            layout="${longdate}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}"
            archiveFileName="${basedir}/logs/${date:format=yyyyMMdd}/log.{###}.txt"
            archiveAboveSize="102400"
            archiveNumbering="Sequence"
            maxArchiveFiles="100" />
  </targets>

  <!--(2)出力ルールの設定-->
  <rules>
    <!-- デバッグレベル以上のログをfileターゲットに出力-->
    <logger name="*" minlevel="Debug" writeTo="file" />
  </rules>

</nlog>




出力のレイアウトは、デフォルトのレイアウトに例外の文字列を足しただけ。


プログラムから出力してみる



    using NLog;

    public class LoggingTest
    {
        // ロガーの生成
        private static Logger logger = LogManager.GetCurrentClassLogger();

        public static void Test()
        {
            logger.Info("Infoメッセージ");
            logger.Warn("Warnメッセージ");
            logger.Error("Errorメッセージ");
            // 他にもいろいろある(適当)

            try
            {
                ExceptionTest();
            }
            catch (Exception ex)
            {
                logger.ErrorException("予期せぬエラーが発生しました", ex);
                // InfoException とか WarnException もあるみたい(適当)
            }
        }

        public static void ExceptionTest()
        {
            try
            {
                throw new Exception("これは内部例外だよ");
            }
            catch (Exception ex)
            {
                throw new Exception("なんかエラー発生!", ex);
            }
        }
    }



例外の詳細をロギングするには ErrorException を使う必要があるようだ。


ログファイルにはこんな感じで書き込まれた。


2012-09-25 18:04:07.9166|INFO|TestApplication1.LoggingTest|Infoメッセージ
2012-09-25 18:04:07.9296|WARN|TestApplication1.LoggingTest|Warnメッセージ
2012-09-25 18:04:07.9296|ERROR|TestApplication1.LoggingTest|Errorメッセージ
2012-09-25 18:04:07.9296|ERROR|TestApplication1.LoggingTest|予期せぬエラーが発生しました System.Exception: なんかエラー発生! ---> System.Exception: これは内部例外だよ
   場所 TestApplication1.LoggingTest.ExceptionTest() 場所 C:\VisualStudioProjects\TestApplication1\TestApplication1\Logging.cs:行 37
   --- 内部例外スタック トレースの終わり ---
   場所 TestApplication1.LoggingTest.ExceptionTest() 場所 C:\VisualStudioProjects\TestApplication1\TestApplication1\Logging.cs:行 41
   場所 TestApplication1.LoggingTest.Test() 場所 C:\VisualStudioProjects\TestApplication1\TestApplication1\Logging.cs:行 24



ところで NuGet ってなんて読むの?ニューゲット?エヌユーゲット?ヌゲット?

0 件のコメント:

コメントを投稿