本文へスキップ
BecomeCoder

C#実践コース · 第4章 ログ出力 · レッスン24

Log4netでログを出す(ローカル実施)

ローカル実施
スターターをダウンロード(.zip)

導入

Log4netは、.NETで長く使われてきた代表的なログライブラリです。「どのレベルを・どこへ(コンソール/ファイル)・どんな書式で出すか」を設定ファイルで制御できるのが強みです。NuGetと設定ファイルを使うため、ローカルで実施します。

図解

flowchart LR
    CODE["log.Info(...) / log.Error(...)"] --> L4N["Log4net"]
    CFG["log4net.config<br/>レベル・出力先・書式"] -.->|制御| L4N
    L4N --> C["コンソール Appender"]
    L4N --> F["ファイル Appender<br/>app.log"]

進め方

  1. スターター108-log4net/starter.zipを展開し、Log4netLesson.slnをVisual Studioで開く
  2. log4netパッケージとlog4net.configが設定済み
  3. Program.csのTODOを埋める
  4. コンソール出力と、生成されるapp.logファイルの両方を確認する
  5. 詰まったらエラー一覧: NuGetエラー
Visual Studioの出力ウィンドウとapp.logファイルに、日時・レベル付きのログが出力された様子
コンソール出力と app.log の両方にレベル付きログが記録される

学ぶこと(コードと設定)

コード側(ログを出す):

using log4net;

// クラスごとにロガーを取得するのが定石
private static readonly ILog log = LogManager.GetLogger(typeof(Program));

log.Info("アプリケーションを開始しました");
log.Warn("設定ファイルが見つからず既定値を使用");
log.Error("データベース接続に失敗", exception);

設定側(log4net.config):

<log4net>
  <!-- コンソールへ出す Appender -->
  <appender name="Console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%level] %message%newline" />
    </layout>
  </appender>
  <!-- ファイルへ出す Appender -->
  <appender name="File" type="log4net.Appender.FileAppender">
    <file value="app.log" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%level] %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="INFO" />       <!-- INFO以上だけ出す -->
    <appender-ref ref="Console" />
    <appender-ref ref="File" />
  </root>
</log4net>
  • LogManager.GetLogger(...)でロガーを取得し、Info/Warn/Error/Fatalでレベル別に出力
  • Appenderが「出力先」(コンソール・ファイル・DB等)、Layoutが「書式」を決める
  • <level value="INFO" />で出力する最低レベルを設定(前レッスンの閾値フィルタそのもの)
  • コードを一切変えず、設定ファイルだけで出力先・レベル・書式を切り替えられるのが最大の利点

期待される出力

2026-07-12 10:00:00 [INFO] アプリケーションを開始しました
2026-07-12 10:00:00 [WARN] 設定ファイルが見つからず既定値を使用
(同じ内容が app.log にも書き込まれる)

まとめ

  • Log4netはAppender(出力先)とLayout(書式)を設定ファイルで制御する
  • LogManager.GetLoggerInfo/Warn/Error/Fatalでレベル別に記録
  • コードを変えず設定だけで出力を切り替えられる(Serilog/NLogも考え方は同じ)

テンプレート構成(教材制作用メモ)

108-log4net/
├── starter.zip   # log4net導入済みプロジェクト / log4net.config / Program.cs(TODO入り)
└── solution/     # 模範解答

次章: データベースWeb APIを扱う「代表的なSDK」へ進みます。