🔥

log4net(.Net6)

2022/11/29に公開

はじめに

logの書き出しの為に毎度同じ実装するのも手間なので、外部ツールを使って楽したい。
VisualStudio2022にて確認
.NetFrameworkと.Net6とでは実装が違っているみたいで、下記は.Net6版です。

インストール

VisualStudioにて適当なプロジェクトを作成。
nugetからインストール
メニュー「ツール」「NuGetパッケージマネージャ」「ソリューションのNuGetパッケージの管理」を選択
開かれた「NuGetソリューション」のウィンドウから「参照」を選択して、「検索」欄に「log4net」を入力して検索

最初の設定

・AssemblyInfo.cs
ファイルを新規作成
「追加」「新しい項目」から「アセンブリ情報ファイル」を選択して、追加する。

AssemblyInfo.csファイルの最終行に以下を追加

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

ConfigFileで、次に作成する構成ファイルを指定する。ここは.NetFrameworkと違う点。

コンソールへの書き出し

ファイルを新規作成
「追加」「新しい項目」から「アプリケーション構成ファイル」を選択して、追加する。
ファイル名は「log4net.xml」としている。
log出力の設定は、xmlファイルとして記載します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<log4net>
		<!-- Appender 設定 -->
		<appender name="logConsole" type="log4net.Appender.ConsoleAppender">
			<param name="AppendToFile" value="true" />
			<param name="RollingStyle" value="Date" />
			<param name="StaticLogFileName" value="false" />
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%d[%t] %p - %m%n" />
			</layout>
		</appender>
		<!-- Appender 指定 -->
		<root>
			<level value="DEBUG" />
			<appender-ref ref="logConsole"/>
			<appender-ref ref="DebugAppender" />
			<appender-ref ref="InfoWarnAppender" />
			<appender-ref ref="ErrorFatalAppender" />
		</root>
	</log4net>
</configuration>

appender内のtypeで、出力する先を決めます。今回はコンソールへの出力なので、「ConsoleAppender」を選択。
アペンダは色々と種類があります。

アペンダ 出力先
ConsoleAppender コンソール
ColoredConsoleAppender コンソール(色指定可能)
EventLogAppender イベントログ
FileAppender ファイル
RollingFileAppender ファイル(分割出力)

conversionPatternには、ログへの書き出し形式を指定できます。

説明
%d 日時
%L 行番号
%m メッセージ
%n 改行
%p ログレベル
%t スレッド名
%M メソッド名

次に、ログを書き出したいコードの先頭に以下を記述

private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

ログを書き出したい箇所に以下を記述

logger.Debug("メッセージ");

ログのレベル毎に記述が変わる

レベル
Fatal
Error
Warm
Info
Debug

ファイルへの書き出し

log4net.xmlにファイル書き出し用のアペンダを追加します。

<appender name="LogToFile" type="log4net.Appender.FileAppender">
	<param name="File" value=".\log\a.log"/>
	<param name="AppendToFile" value ="true"/>
	<layout type="log4net.Layout.PatternLayout">
		<conversionPattern value="%d[%t] %p - %m%n" />
	</layout>
</appender>

同じく、App.config内の使用アペンダも追加。
LogToFileの項目を追加します。

<!-- 使用するアペンダの選択 -->
<root>
	<appender-ref ref="LogToConsole" />
	<appender-ref ref="LogToFile" />
</root>

ファイルへの書き出し(分割出力)

サイズや日時でログファイルを分割してくれる。分割したファイルは何個まで残すかの指定も可能です。
log4net.xmlのアペンダの設定を変更します。

<appender name="LogToFile" type="log4net.Appender.RollingFileAppender">
	<param name="File" value=".\log\a.log"/>
	<param name="AppendToFile" value ="true"/>
	
	<param name="rollingStyle" value="Size" />
	<param name="maxSizeRollBackups" value="3"/>
	<param name="maximumFileSize" value="5KB"/>
	<param name="staticLogFileName" value="false"/>
	
	<layout type="log4net.Layout.PatternLayout">
		<conversionPattern value="%d[%t] %p - %m%n" />
	</layout>
</appender>

Discussion