導入
ログの考え方(ログレベル)とlog4netの設定はログ出力の回で詳しく扱いました。ここでは**「ロギングという分野で、どのNuGetを選ぶか」**という実務の視点で整理します。log4net / Serilog / NLogは同じ問題を解く代表的な選択肢で、考え方は共通です。
図解
flowchart TB
CODE["log.Info(...) / logger.Information(...)"]
subgraph LIBS["ロギングNuGetの代表格(設定で出力先・書式・レベルを制御)"]
L4N["log4net<br/>老舗・設定ファイル中心"]
SER["Serilog<br/>構造化ログが得意"]
NLG["NLog<br/>高速・設定が柔軟"]
end
CODE --> LIBS
LIBS --> OUT["コンソール / ファイル / DB / クラウド"]
進め方
- スターター
116-log4net-nuget/starter.zipを展開し、Log4netNugetLesson.slnを開く(log4netとlog4net.configが設定済み) Program.csのTODOを埋め、コンソールとapp.logの両方に出ることを確認する- ログ出力の回で扱った設定ファイル(Appender/Layout)を見返すと理解が深まる
学ぶこと
using log4net;
// クラスごとにロガーを取得するのが定石
private static readonly ILog log = LogManager.GetLogger(typeof(Program));
log.Info("処理を開始しました");
log.Warn("リトライします");
log.Error("外部APIの呼び出しに失敗", exception);
// 参考:Serilog なら「構造化ログ」— 値を名前付きで残せる(後から検索しやすい)
// Log.Information("注文 {OrderId} を {Amount} 円で確定", orderId, amount);
log4net:設定ファイル中心の老舗。既存の.NET Frameworkプロジェクトで特に多いSerilog:{OrderId}のように構造化ログを残せ、JSONで出力してログ基盤に流すのが得意。新規で人気NLog:高速で設定が柔軟。用途に応じて選ぶ- 共通する要点:コードは
GetLogger+レベル別メソッド、出力先や書式は設定で切り替える(コードを変えずに運用を変えられる)
期待される出力
2026-07-15 10:00:00 [INFO] 処理を開始しました
2026-07-15 10:00:00 [WARN] リトライします
(同じ内容が app.log にも書き込まれる)
まとめ
- ロギングの代表NuGetは
log4net/Serilog/NLog。問題は同じで考え方も共通 - どれも「コードはロガー取得+レベル別出力、運用は設定ファイル」で切り替える
- 新規で構造化ログが欲しければ
Serilogが有力候補
次回: オブジェクト間のコピーを自動化するAutoMapperです。
テンプレート構成(教材制作用メモ)
116-log4net-nuget/
├── starter.zip # log4net導入済み / log4net.config / Program.cs(TODO入り)
└── solution/ # 模範解答(スターターと重複しないNuGet観点の課題)