概要
- 定義
Log4net = Log for .NET。Apache Log4j(Java定番ログフレームワーク)の.NET向け公式ポーティング版で、実績のあるオープンソースのロギングライブラリです。 - 主な機能
プロジェクトに導入すると、ファイル読み書き処理を自作せずとも簡単にアプリケーションログを出力可能。実行時情報や例外のスタックトレースを記録し、デバッグや本番環境のトラブル調査に活用できます。 - 用語の対応
- Log4j:Javaエコシステムで長く使われているログ部品
- Log4net:C#/.NET向けに移植されたLog4j
インストール
新しい.NETプロジェクトはNuGetでのインストールを推奨:
dotnet add package log4net
Visual Studioの「NuGetパッケージの管理」から log4net を検索してワンクリックインストールもできます。
古いlog4netはDLLを手動でダウンロード参照していましたが、現在はNuGetが主流です。
Log4Net 環境構築
log4netはコンソールアプリ、デスクトップアプリ、Webアプリ、どの種類のプロジェクトでも利用できます。
利用手順
手順1:Web.configを編集しlog4net設定を追加
<?xml version="1.0"?>
<configuration>
<configSections>
<!-- log4net設定ノードを登録 -->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!-- 日付でローテーションするファイル出力アペンダ -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!-- ログ保存先。相対パスを推奨、USBなど絶対パスをハードコードしない -->
<param name="File" value="logs\\"/>
<!-- 追記モード:true=ログを追記、false=起動時にファイルをクリア -->
<param name="AppendToFile" value="true"/>
<!-- 保持するログファイルの最大件数 -->
<param name="MaxSizeRollBackups" value="10"/>
<!-- 固定ファイル名の有効化 false=日付別にファイルを作成 -->
<param name="StaticLogFileName" value="false"/>
<!-- ファイル名フォーマット -->
<param name="DatePattern" value="yyyy-MM-dd".log""/>
<!-- ローテーション方式:Date=日付単位でログを分割 -->
<param name="RollingStyle" value="Date"/>
<!-- ログ出力フォーマット -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
<!-- ❗元のスクリーンショットのテンプレートに余分な%loggernameがありログ末尾にゴミ文字が出るため削除済み -->
</layout>
</appender>
<!-- ルートロガー設定、全体に適用 -->
<root>
<!-- ログレベル all:全レベル出力。選択値:DEBUG/INFO/WARN/ERROR/FATAL/OFF -->
<level value="all"/>
<!-- 上で定義したアペンダを紐付け -->
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>Code language: HTML, XML (xml)
G:\xxxのような絶対パスをハードコードしないでください。サーバー配置時に動作しなくなります。相対パスlogs\\を使用してください;- 本番環境では
levelをINFOまたはERRORに変更し、大量のDEBUGログでディスクを消費しないようにしてください。
手順2:Log4Netをグローバル初期化
プロジェクトの Global.asax 内の Application_Start メソッドに初期化コードを追加し、アプリ起動時に設定を読み込みます
protected void Application_Start(object sender, EventArgs e)
{
// log4netを初期化、Web.configの設定を読み込む
log4net.Config.XmlConfigurator.Configure();
}Code language: JavaScript (javascript)
注意:この一行が無いとログ出力呼び出しを行ってもファイルが一切生成されません。よくある落とし穴です。
手順3:ページでLoggerを取得しログを出力
Default.aspx.cs に呼び出しコードを記述します。どこからでも呼び出せます、この例は1ページでのデモです。
using log4net;
public partial class _Default : System.Web.UI.Page
{
// ロガーインスタンス取得。文字列はロガー名、自由に変更可能
public static readonly ILog log = LogManager.GetLogger("logger-name");
protected void Page_Load(object sender, EventArgs e)
{
log.Info("通常ログ");
log.Error("エラーログ");
// その他利用可能なレベル
// log.Debug("デバッグログ");
// log.Warn("警告ログ");
// log.Fatal("致命的なエラーログ");
}
}
推奨記述:ILog は static readonly として定義し、インスタンスを何度も作らないようにしパフォーマンスを改善します。
実行時の動作
- アプリ実行後、ウェブサイトルートに
logsフォルダが自動作成されます; 2026-08-04.logのような形式のログファイルが自動生成されます;- ファイル内出力サンプル:
2026-08-04 15:30:22,123 [6] INFO logger-name - 通常ログ
2026-08-04 15:30:22,129 [6] ERROR logger-name - エラーログCode language: CSS (css)
補足情報
- ファイル出力以外にもコンソール、データベース、メールへの出力に対応;
- 新規プロジェクトでは
NLog/Serilogも比較検討してください。.NET Core/.NET5以上のサポートがより充実しています。Log4Netは古いWebForm、WinFormsプロジェクトの保守に主に使われます。
概要とインストール
Next: ログがデータベースへ書き込まれます