LoginSignup
133
161

More than 5 years have passed since last update.

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

Last updated at Posted at 2012-07-29

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

参考

133
161
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
133
161