りおんクロニクル


C#でログを残す(Serilog)|構成・出力先・ローテーション・実務ガイド【2026年版】

Home【2026年版】C# / .NET入門と実践ガイド|基礎・業務アプリ開発・SQLite連携まで体系的に解説

C#でログを残す場合、 Serilog は最も人気があり、業務アプリでも標準的に使われています。 ファイル出力・ローテーション・構造化ログ・SQLite出力など、 必要な機能がすべて揃っています。

この記事でわかること
・Serilogの基本構成
・ファイル出力・ローテーション(日次・サイズ)
・構造化ログ(JSON)
・例外ログの残し方
・WPF/WinForms/ASP.NETでの利用
・SQLiteログ(Serilog.Sinks.SQLite)
・業務アプリ向けベストプラクティス

1. Serilogの特徴

業務アプリでは「ファイル出力 + ローテーション」が最も使われます。

2. Serilogの基本設定(最小構成)

■ 2-1. Program.cs(コンソール/WPF/WinForms共通)

using Serilog;

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.File("logs/app.log")
    .CreateLogger();

Log.Information("アプリ起動");

これだけで logs/app.log にログが残ります。

3. ローテーション(Rolling File)

ログファイルが肥大化しないように、 日次ローテーションサイズローテーション を設定します。

■ 3-1. 日次ローテーション

Log.Logger = new LoggerConfiguration()
    .WriteTo.File(
        "logs/log-.txt",
        rollingInterval: RollingInterval.Day
    )
    .CreateLogger();

ファイル名例:log-2026-04-05.txt

■ 3-2. サイズローテーション(10MBごと)

Log.Logger = new LoggerConfiguration()
    .WriteTo.File(
        "logs/app.txt",
        fileSizeLimitBytes: 10_000_000,
        rollOnFileSizeLimit: true
    )
    .CreateLogger();

4. 構造化ログ(JSON出力)

ログをJSONで残すと、後で解析しやすくなります。

Log.Logger = new LoggerConfiguration()
    .WriteTo.File(
        "logs/log-.json",
        rollingInterval: RollingInterval.Day,
        formatter: new Serilog.Formatting.Json.JsonFormatter()
    )
    .CreateLogger();

ログ解析ツール(Kibanaなど)と相性が良い形式です。

5. 例外ログ(Exception)

Serilogは例外を自動で構造化してくれるため、 例外ログが非常に読みやすいです。

■ 5-1. try-catchで例外ログ

try
{
    throw new InvalidOperationException("テスト例外");
}
catch (Exception ex)
{
    Log.Error(ex, "エラーが発生しました");
}

■ 5-2. 未処理例外をキャッチ(WPF)

AppDomain.CurrentDomain.UnhandledException += (s, e) =>
{
    Log.Fatal((Exception)e.ExceptionObject, "未処理例外");
};

業務アプリでは必須の設定です。

6. SerilogをDIに登録(ASP.NET / WPF / WinForms)

■ 6-1. ASP.NET Core

builder.Host.UseSerilog((context, config) =>
{
    config
        .MinimumLevel.Debug()
        .WriteTo.File("logs/web-.txt", RollingInterval.Day);
});

■ 6-2. WPF / WinForms(Generic Host)

Host.CreateDefaultBuilder()
    .UseSerilog((ctx, cfg) =>
    {
        cfg.WriteTo.File("logs/app-.txt", RollingInterval.Day);
    });

DIと組み合わせると、サービス層でもログが使えます。

7. SQLiteにログを保存(Serilog.Sinks.SQLite)

ログをSQLiteに保存すると、 検索・集計・ダッシュボード化 が簡単になります。

■ 7-1. SQLiteログ設定

Log.Logger = new LoggerConfiguration()
    .WriteTo.SQLite("logs/log.db")
    .CreateLogger();

テーブルは自動生成されます。

■ 7-2. 検索例(SQLite)

SELECT Timestamp, Level, Message
FROM Log
WHERE Level = 'Error'
ORDER BY Timestamp DESC;

ログビューアを作るのも簡単です。

8. ログの粒度(Level)

Level用途
Verbose詳細すぎる情報(デバッグ用)
Debug開発時のデバッグ情報
Information通常の操作ログ
Warning注意すべき状態
Error処理失敗(復旧可能)
Fatal致命的エラー(アプリ停止)

業務アプリでは Information / Warning / Error が中心です。

9. 業務アプリ向けベストプラクティス

まとめ:Serilogは“業務アプリの標準ログ基盤”になる

「ログをちゃんと残したい」「後から調査できるようにしたい」 という現場のニーズに対して、 Serilogは最も実務的で強力な選択肢です。 この記事をベースに、あなたのアプリに最適なログ基盤を設計してみてください。

前のページ  次のページ