C# log4netでテキストにログを出力する

C#のlog4netでテキストにログを出力するサンプルです。

確認環境
・Microsoft Visual Studio Community 2019

目次

サンプル log4netとは
  1.dllファイルを取得する
  2.dllファイルを参照に追加する
  3.設定ファイルを作成する
  4.ソースコードの作成
  5.出力ファイルの確認

log4netとは

 

1.dllファイルを取得する

下記のサイトからlog4net-2.0.8-bin-newkey.zipをダウンロードします。

Apache log4netのサイト
https://logging.apache.org/log4net/download_log4net.cgi 

ダウンロードしたzipを展開し以下のファイルを任意の場所に配置します。
・log4net.dll

 

2.dllファイルを参照に追加

log4net.dllを参照に追加します。

1.参照を右クリックし、「参照の追加」をクリックします。

 

2.参照マネージャーが表示されます。
「参照」ボタンを押すとファイル選択ダイアログが表示されるのでlog4net.dllを選択します。

 

3.参照の配下にlog4netが追加されました。

 

3.設定ファイルを作成する

1.AssemblyInfo.csを修正します。
AssemblyInfo.csが表示されていない場合は、「プロジェクト」→「すべてのファイルを表示」をクリックします。

 

2.AssemblyInfo.csの一番最後の行に以下を追加します。
xmlファイルの置き場所を./log/Log4net.xmlとしました。

// Log4Net用設定ファイル
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "./log/Log4net.xml", Watch = true)]

 

3.logフォルダを作成し配下にLog4net.xmlを作成します。空ファイルを作成し名称をつけるやり方で問題ありません。

 

4.log4net.xmlのプロパティで「出力ディレクトリにコピー」を「常にコピー」にセットします。

 

5.Log4net.xmlに以下のコードを記述します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <appender name="testlog" type="log4net.Appender.RollingFileAppender">

      <appendToFile value="true" />
      <StaticLogFileName value="false" />
      
      <rollingStyle value="Date" />
      <file value=".\\log\\testlog-" />
      <DatePattern value='yyyyMMdd".log"' />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="Error" />
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="%date [%thread] [%-5level] %logger - %message%n" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="testlog" />
    </root>
  </log4net>
</configuration>

4行目は、ファイルに出力するログの設定です。RollingFileAppenderと9行目のrollingStyleの値をDateとしているので日毎にファイルを出力します。
6行目は、追記可としています。
7行目は、年月日を追加するのでファイル名変更可能としています。
10行目は、パスとファイル名の前半部分です。
11行目は、ファイルの後半部分です。yyyyMMddに年月日が入ります。
12行目は、複数プロセスがログに書き込めるようにします。
14~17行目は、出力するログの種類です。INFOからErrorまで出力します。
debug – info – warn – error – fatalがあります。
24行目で、上記ログを呼び出します。

以下は、ApacheのLog4netの設定のリンクです。
https://logging.apache.org/log4net/release/manual/configuration.html

 

4.ソースコードの作成

ログを出力するコードです。

using log4net;

class Test1
{
	static void Main()
	{
		Print1();
	}
	public static void Print1()
	{
		ILog log = LogManager.GetLogger(
			System.Reflection.MethodBase.GetCurrentMethod().Name);
		string str1 = "テストです";
		log.Debug(str1);
		log.Info(str1);
		log.Warn(str1);
		log.Error(str1);
		log.Fatal(str1);
	}
}

11行目は、ログクラスのインスタンスを取得しています。
12行目は、リフレクションです。GetCurrentMethod().Nameで現在のメソッド名を出力します。
14行目以降は、XMLで指定されたログのみ出力されます。

 

5.出力ファイルの確認

1.実行ファイルがあるフォルダにlogフォルダがあります。(プロジェクトのフォルダ>bin>Debug)

2.logフォルダの中は、Log4net.xmlとログファイルが出力されます。

3.ログファイルの中身は以下の通りです。

2020-09-24 21:56:05,949 [1] [INFO ] Print1 - テストです
2020-09-24 21:56:05,959 [1] [WARN ] Print1 - テストです
2020-09-24 21:56:05,959 [1] [ERROR] Print1 - テストです

関連の記事

Visual Studio デバッグの方法
Visual Studio リファクタリングの方法

△上に戻る