Visual Studio 2022で、C#.NETプロジェクトにlog4netを組み込む手順を紹介します。今回紹介するのは、僕が作るプロジェクトでよく使用する出力方法です。後述するlog4netパラメータを適宜変更して使用してください。
Nugetから最新の安定版をインストール
Nugetから、最新の安定バージョンを対象のプロジェクトにインストールします。
Package.configを確認
Package.configに、以下が追記されていることを確認します。
以下の文字列は、「log4netのバージョンは◯◯で、プロジェクトのターゲット.NETframeworkバージョンは◯◯ですよー」と書いてあるだけなので、あまり気にしないでいいです。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.15" targetFramework="net48" />
</packages>
AssemblyInfo.csに追記
AssemblyInfo.csの末尾に、以下を追記します。
以下の文字列は、「log4netの設定は、AppConfigにXMLで記述しますよー」と宣言しています。
// log4net用設定
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
App.configに追記
App.configの<configration>セクション内に、log4netセクションを定義します。
以下の定義では、ログファイルを情報ログ・動作確認ログ・異常ログの3種類に分別しています。
情報ログと動作確認ログは、指定サイズ超過でログファイルの切替えを行い、
異常ログは日付変更でログファイルの切替えを行います。
各種パラメータは、以下に記載しているもの以外にも、色々と定義ができます。
詳しくは、https://logging.apache.org/log4net/release/config-examples.htmlを参照ください。
<log4net>
<!-- 情報ログ(Info) -->
<appender name="InfoLogAppender" type="log4net.Appender.RollingFileAppender">
<!-- ログファイル名 -->
<File value="..\Log\Info.log"/>
<!-- 追加書込み -->
<AppendToFile value="true"/>
<!-- ファイルBackupの条件(Maxサイズ超過で切替) -->
<rollingStyle value="Size"/>
<!-- 最大ファイルサイズ -->
<MaximumFileSize value="1MB"/>
<!-- ログファイルバックアップ数 -->
<MaxDateRolBackups value="10"/>
<!-- どのログ種類を対象とするか(Infoのみ) -->
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMax value="INFO"/>
<LevelMin value="INFO"/>
</filter>
<!-- ログ出力内容 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] [%class] [%method] %message%newline"/>
</layout>
</appender>
<!-- 動作ログ(Debug) -->
<appender name="AppLogAppender" type="log4net.Appender.RollingFileAppender">
<!-- ログファイル名 -->
<File value="..\Log\Debug.log"/>
<!-- 追加書込み -->
<AppendToFile value="true"/>
<!-- ファイルBackupの条件(Maxサイズ超過で切替) -->
<rollingStyle value="Size"/>
<!-- 最大ファイルサイズ -->
<MaximumFileSize value="1MB"/>
<!-- ログファイルバックアップ数 -->
<MaxSizeRollBackups value="1"/>
<!-- どのログ種類を対象とするか(Debugのみ) -->
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMax value="DEBUG"/>
<LevelMin value="DEBUG"/>
</filter>
<!-- ログ出力内容 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] [%class] [%method] %message%newline"/>
</layout>
</appender>
<!-- 異常ログ(Warn, Error, Fatal) -->
<appender name="ErrorLogAppender" type="log4net.Appender.RollingFileAppender">
<!-- ログファイル名(先頭部分) -->
<File value="..\Log\Error"/>
<!-- 追加書込み -->
<AppendToFile value="true"/>
<!-- ファイルBackupの条件(日付変更で切替) -->
<rollingStyle value="date"/>
<!-- ログファイル名が固定ではないので"false"を指定 -->
<staticLogFileName value="false"/>
<!-- ログファイル名(後半部分) -->
<datePattern value="yyyyMMdd.log"/>
<!-- ログファイルバックアップ数 -->
<MaxDateRolBackups value="30"/>
<!-- どのログ種類を対象とするか(Warn, Error, Fatal) -->
<filter type="log4net.Filter.LevelRangeFilter">
<LevelMax value="FATAL"/>
<LevelMin value="WARN"/>
</filter>
<!-- ログ出力内容 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%-5level] [%thread] [%class] [%method] %message%newline"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="InfoLogAppender"/>
<appender-ref ref="AppLogAppender"/>
<appender-ref ref="ErrorLogAppender"/>
</root>
</log4net>
ログクラスを定義
プログラムでログを使用するため、ログ用クラスを定義します。
public class Log
{
/// <summary>
/// log4netインスタンス
/// </summary>
public static log4net.ILog Trace = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
}
おわり
以上で、ログ出力のための準備は終わりました。
あとは、ログを出したいところで、以下のように記述してください。
Log.Trace.Info("プログラム開始"); // 情報ログ
Log.Trace.Error("異常が発生しました"); // 異常ログ(通常エラー)
Log.Trace.Fatal("プログラム起動失敗"); // 異常ログ(致命的エラー)
Log.Trace.Debug("デバッグ中"); // 動作ログ