log4net(.Net6)
はじめに
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