ソフトウェアを動作させるとき、動作状況をログとして、テキストファイルに出力することがあります。
今までは、自作のメソッドを使っていました。
しかし、知人がILoggerを使ったサンプルをくれました。
それがどうも使いにくいのです。
そこで、Copilotに質問しながら、最小限のC#サンプルを作ってみました。
前提
C#のWindowsフォームアプリで作ります。
ドメイン駆動設計で実現したいので、Presentation層とUseCase層(≒Application層)のプロジェクトをそれぞれ用意しました。Presentationプロジェクトの参照マネージャで、UseCaseプロジェクトに依存を示すチェックを入れています。
この辺りが良く分からない方は、ここを読み飛ばしても多分、動作すると思います。
ちょっとかじってみたい方は次の記事をどうぞ。
Form1のコード
Presentationプロジェクトには既にForm1があると思います。
そこに、Buttonを1つ配置してください。
また、F7キーを押してエディタを開き、以下のコードを貼り付けて下さい。
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using UseCase;
namespace LoggerSample
{
public partial class Form1 : Form
{
private readonly ServiceCollection _services = new();
public Form1()
{
InitializeComponent();
// Serilog の設定
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Debug() // VS 出力ウィンドウ
.WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}")
.CreateLogger();
_services.AddLogging(builder =>
{
builder.AddSerilog();
});
_services.AddSingleton<Class1>();
}
private void Button1_Click(object sender, EventArgs e)
{
var class1 = _services.BuildServiceProvider().GetService<Class1>();
class1!.Execute();
}
}
}
次に、ソリューションエクスプローラのプロジェクト名を右クリックし、「NuGet パッケージの管理」から以下の6パッケージをインストールしてください。
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Logging
Serilog
Serilog.Extensions.Logging
Serilog.Sinks.Debug
Serilog.Sinks.File
このフォームは、コンストラクタで、ログをテキストファイルに出力する設定をしています。このとき、Serilogというパッケージを使います。また、Class1クラスに依存性注入を行うための設定もしています。(出力ウィンドウにも出力される設定もされている)
また、button1をクリックすると、Class1にロガーの依存性を注入し、Executeメソッドを実行します。
Class1のコード
ライブラリプロジェクトとしてUseCaseを作ると、既にClass1.csがあると思います。そこに、以下のコードを貼り付けて下さい。
using Microsoft.Extensions.Logging;
namespace UseCase
{
public class Class1(ILogger<Class1> logger)
{
private readonly ILogger _logger = logger;
public void Execute()
{
_logger.LogInformation("Hello Logger!");
_logger.LogWarning("注意メッセージ");
_logger.LogError("エラーが発生しました");
}
}
}
次に、「NuGet パッケージの管理」から次の1パッケージをインストールしてください。
Microsoft.Extensions.Logging
このClass1は、プライマリコンストラクタでILoggerが注入され、Executeが実行されると、Information、Warning、Errorレベルのログが出力されます。
出力結果
exeのあるフォルダの下に、logs/log-yyyyMMdd.txtというファイルができます。

中を開けると、日時、ログレベル、ログ内容が出力されていることが確認できます。
2026-02-14 23:00:56 [Information] Hello Logger!
2026-02-14 23:00:56 [Warning] 注意メッセージ
2026-02-14 23:00:56 [Error] エラーが発生しました
また、デバッグ中の出力ウィンドウにも出力されます。
[23:00:56 INF] Hello Logger!
[23:00:56 WRN] 注意メッセージ
[23:00:56 ERR] エラーが発生しました
フォーマットがちょっと異なるんですね。
まとめ
C#で、ILoggerを使い、テキストファイルにログを出力することができました。
EdgeのCopilotがなければ、とてもこの結果を得ることはできませんでした。
現時点でも、ログのレベルという点に心理的抵抗がありますが、これがスタンダードのようですので、徐々に慣れていこうと思います。




コメント