C#
Log4Net

Log4Net を利用してログを記録する

More than 5 years have passed since last update.

C#.NET で Log4Net を利用してログを記録する設定のメモ。


方針



  1. ログを %Appdata%\[会社名]\[製品名]\log\ の下に保存したい

    [会社名]=Rohinomiya

    [製品名]=SampleLog4Net




  2. ログを以下のように3つに分けたい


    1. インフォログ(1つのファイルに出力/INFO~WARNレベルのログを保存)

    2. エラーログ(日付別にファイルを作成/ERROR~FATALのログを保存)

    3. トレースログ(日付別にファイルを作成/TRACE~FATALのログを保存)




参考:ログレベル


  • Fatal システム停止するような致命的な障害

  • Error システム停止はしないが、問題となる障害

  • Warn 障害ではない注意警告

  • Info 操作ログなどの情報

  • Debug 開発用のデバッグメッセージ

  • trace 詳細なデバッグの出力


設定手順



  1. Log4Net公式サイトからLog4Net.dllをダウンロードし、C#プロジェクトの参照設定に追加

  2. AssemblyInfo.cs に追記: Log4Netの設定ファイルを読み込む

  3. Log4Netの設定ファイルを記述する(Log4net.Config.xml) 出力フォルダにコピーする=TRUE

  4. Program.cs にて、Loggerオブジェクトを生成すれば、あとはログを吐くだけ


AssemblyInfo.cs に追記


AssemblyInfo.cs

// read Log4Net Configuration file

[assembly: log4net.Config.XmlConfigurator(ConfigFile=@"Log4net.Config.xml", Watch=true)]


Log4net.Config.xml


Log4net.Config.xml

<?xml version="1.0" encoding="utf-8" ?>

<configuration>
<log4net>

<!-- 通常ログ:単一ファイル出力 -->
<appender name="InfoLogDailyAppender" type="log4net.Appender.FileAppender">
<File value="${APPDATA}\\Rohinomiya\\SampleLog4Net\\Logs\\Info.log" />

<AppendToFile value="true" />

<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMax" value="WARN" />
<param name="LevelMin" value="INFO" />
</filter>

<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date [%thread] [%-5level] %logger - %message%n" />
</layout>
</appender>

<!-- エラーログ:分割ファイル出力 -->
<appender name="ErrorLogDailyAppender" type="log4net.Appender.RollingFileAppender">
<!-- ファイル名は日付ごと -->
<param name="File" value="${APPDATA}\\Rohinomiya\\SampleLog4Net\\Logs\\Error_" />
<param name="DatePattern" value='yyyyMMdd".log"' />
<param name="RollingStyle" value="date" />
<param name="StaticLogFileName" value="false" />

<param name="AppendToFile" value="true" />

<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMax" value="FATAL" />
<param name="LevelMin" value="ERROR" />
</filter>

<param name="MaximumFileSize" value="10MB" />
<param name="MaxSizeRollBackups" value="10" />

<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date [%thread] [%-5level] %logger %file(%line) %class %method - %message%n" />
</layout>
</appender>

<!-- デバッグ用:分割ファイル出力 -->
<appender name="DebugLogDailyAppender" type="log4net.Appender.RollingFileAppender">

<!-- ファイル名は日付ごと -->
<param name="File" value="${APPDATA}\\Rohinomiya\\SampleLog4Net\\Logs\\Trace_" />
<param name="DatePattern" value='yyyyMMdd".log"' />
<param name="RollingStyle" value="date" />
<param name="StaticLogFileName" value="false" />

<param name="AppendToFile" value="true" />

<filter type="log4net.Filter.LevelRangeFilter">
<!-- <param name="LevelMax" value="FATAL" /> -->
<param name="LevelMin" value="TRACE" />
</filter>

<param name="MaximumFileSize" value="10MB" />
<param name="MaxSizeRollBackups" value="10" />

<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date [%thread] [%-5level] %logger %file(%line) %class %method - %message%n" />
</layout>
</appender>

<root>
<!-- TRACE以上のログを記録 -->
<level value="TRACE" />
<!-- 使用する Appender -->
<appender-ref ref="InfoLogDailyAppender" />
<appender-ref ref="ErrorLogDailyAppender" />
<appender-ref ref="DebugLogDailyAppender" />
</root>

</log4net>
</configuration>



Program.cs


program.cs

public static void Main(string[] args)

{
ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

logger.Debug("開発中のデバッグ/トレースに使用する");
logger.Info("情報(操作履歴等)");
logger.Warn("注意/警告(障害の一歩手前)");
logger.Error("システムが停止するまではいかない障害が発生");
logger.Fatal("システムが停止する致命的な障害が発生");
}



実行結果


info.log

2012-07-28 17:48:32,443 [1] [INFO ] SampleLog4Net.Program - 情報(操作履歴等)

2012-07-28 17:48:32,445 [1] [WARN ] SampleLog4Net.Program - 注意/警告(障害の一歩手前)


Error_20120728.log

2012-07-28 17:48:32,445 [1] [ERROR] SampleLog4Net.Program c:\\develop\SampleLog4Net\SampleLog4Net\Program.cs(26) SampleLog4Net.Program Main - システムが停止するまではいかない障害が発生

2012-07-28 17:48:32,446 [1] [FATAL] SampleLog4Net.Program c:\\develop\SampleLog4Net\SampleLog4Net\Program.cs(28) SampleLog4Net.Program Main - システムが停止する致命的な障害が発生


Trace_20120728.log

2012-07-28 17:48:32,420 [1] [DEBUG] SampleLog4Net.Program c:\develop\SampleLog4Net\SampleLog4Net\Program.cs(20) SampleLog4Net.Program Main - 開発中のデバッグ/トレースに使用する

2012-07-28 17:48:32,443 [1] [INFO ] SampleLog4Net.Program c:\develop\SampleLog4Net\SampleLog4Net\Program.cs(22) SampleLog4Net.Program Main - 情報(操作履歴等)
2012-07-28 17:48:32,445 [1] [WARN ] SampleLog4Net.Program c:\develop\SampleLog4Net\SampleLog4Net\Program.cs(24) SampleLog4Net.Program Main - 注意/警告(障害の一歩手前)
2012-07-28 17:48:32,445 [1] [ERROR] SampleLog4Net.Program c:\develop\SampleLog4Net\SampleLog4Net\Program.cs(26) SampleLog4Net.Program Main - システムが停止するまではいかない障害が発生
2012-07-28 17:48:32,446 [1] [FATAL] SampleLog4Net.Program c:\develop\SampleLog4Net\SampleLog4Net\Program.cs(28) SampleLog4Net.Program Main - システムが停止する致命的な障害が発生
2012-07-28 17:48:32,448 [1] [DEBUG] SampleLog4Net.Program c:\develop\SampleLog4Net\SampleLog4Net\Program.cs(34) SampleLog4Net.Program Main - D:\Users\fukuda\AppData\Local


参考