Log4net(12) ConversionPatternの詳細

ログファイルの出力フォーマットを ConversionPattern で指定する際に、%記号が何に変換されるかを解説しよう。とは言っても、

http://codezine.jp/a/article.aspx?aid=71

ここを参照すれば、ほぼわかるのだが、一応例とともに説明しておこう。

サンプルプログラム

using System;
using System.Collections.Generic;
using System.Text;

namespace sample_Log4netForConsole2
{
    class Program
    {
        static void Main(string[] args)
        {
            LogTest l = new LogTest();

            log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(@"../../log4net.xml"));
            log4net.ILog logger = log4net.LogManager.GetLogger("GetLogger-Main");
            log4net.MDC.Set("key1","val1");
            log4net.MDC.Set("key2","val2");
            log4net.NDC.Push("level-1");
            log4net.NDC.Push("level-2");
            l.func(logger);
            log4net.NDC.Pop();
            log4net.NDC.Pop();
            log4net.MDC.Clear();
        }
    }

    class LogTest
    {
        public void func(log4net.ILog logger)
        {
            System.Threading.Thread.Sleep(1500);
            try
            {
                throw new Exception("thorw exception by myself");
            }
            catch(Exception e)
            {
                logger.Error("This is Error message", e);
            }
        }
    }
}

%記号が何に変換されるか

記号説明出力される結果
%literal{hoge %n hoge}文字列をそのまま出力する(%を出力したい場合など)hoge %n hoge (%nが改行コードではなく、そのまま出力される)
%newline改行改行コード
%n
%loggerロガー名GetLogger-Main
%c
%typeクラス名sample_Log4netForConsole2.LogTest
%class
%C
%date{yyyy-MM-dd HH:mm:ss,fff}ミリ秒までの現在日時2006-06-23 23:21:44,281
%date{dd MMM yyyy HH:mm:ss,fff}24 Jun 2006 00:46:30,640
%d(何もフォーマットを指定しなくてもOK)2006-06-23 23:21:44,281
%exception例外の内容(ただし、例外オブジェクトを引数に指定すると、%exception が無くても例外の内容が出力されるので、無意味かもしれない)System.Exception: thorw exception myself
at sample_Log4netForConsole2.LogTest.func(ILog logger) in C:\D\プログラム\c_sharp2005\sample_Log4netForConsole2\sample_Log4netForConsole2\Program.cs:line 33
%Fログ出力した際のファイルのフルパスC:\D\プログラム\c_sharp2005\sample_Log4netForConsole2\sample_Log4netForConsole2\Program.cs
%file
%lログ出力した際の関数名とファイルのフルパスsample_Log4netForConsole2.LogTest.func(C:\D\プログラム\c_sharp2005\sample_Log4netForConsole2\sample_Log4netForConsole2\Program.cs:37)
%location
%L行数37
%line
%m指定したメッセージThis is Error message
%message
%Mメソッド名func
%method
%pログレベルERROR
%level
%PMDCにセットしたキーと値の文字列(スレッド毎に固有の値となるので、マルチスレッド時に重宝する、、、ハズ){key2=val2, log4net:HostName=workgroup, key1=val1}
%property
%properties
%X
%mdc
%rLoggerのセットアップが完了してからの経過時間(ミリ秒)1812
%timestamp
%tログを生成したスレッド番号(System.Threading.Thread.CurrentThread.ManagedThreadId)1
%thread
%xNDCにPushした文字列を空白区切りで出力する(これもスレッド固有の値となるので、マルチスレッド時に重宝する、、、ハズ)level-1 level-2
%ndc
%a実行ファイル名sample_Log4netForConsole2.exe
%appdomain
%uよくわかんない何も出力されないのだが・・
%identity
%utcdateログを出力した日時をUTCでミリ秒単位まで出力する。フォーマットは、%date を参照2006-06-23 14:47:42,343
%utcDate
%UtcDate
%wユーザ名を出力workgroup\shima
%username