前回はNLogの使用方法を紹介しましたが、今回はSerilogです。
Serilogも広く使用されており、NLog と同様にログレベル(Verbose, Debug, Information など)の切り分け・ログファイルの出力先・出力形式のカスタマイズなどが簡単に設定できるログライブラリです。
- 使用環境
- Windows 10 Pro 2009 ビルド19045.5854
- Visual Studio 2020 Version 17.14.2
- Serilog 4.3.0
Visual Studio C# Serilogを使用した本格的なデバッグログ管理
Visual Studio C# Serilogの主な用途
- デバッグ
- Log.Debug()を使って変数の値や処理の流れを記録し、問題の特定を容易にする
- エラートラッキング
- Log.Error()やLog.Fatal()を使ってエラーメッセージやスタックトレースを記録し、原因を分析する
- ユーザーアクションの記録
- ログインやデータ更新の履歴を
Log.Information()
で記録し、監査やトラブルシューティングに役立てる
- ログインやデータ更新の履歴を
- パフォーマンス監視
- アプリケーションの処理時間を測定し、ボトルネックを特定する
Visual Studio C# Serilogのログ出力形式
№ | 出力先 | ファイル形式 | 用 途 |
---|---|---|---|
1 | コンソール | 標準出力(テキスト) | 開発時のデバッグ、リアルタイム監視 |
2 | ファイル | .txt .log .json .csv .xml | ログの保存・分析・長期記録 |
3 | データベース | SQLテーブル | 監査ログ・履歴管理・検索性向上 |
4 | クラウド | JSON, XML, Parquet | 分析・可視化、クラウドサービス連携 |
5 | イベントログ | Windows Event Log | システム監視、セキュリティログ |
6 | メッセージキュー | Kafka, RabbitMQ | 分散システムのログ管理 |
7 | リモートサーバ | Syslog, HTTP API | 集中管理、ログ集約 |
8 | メール通知 | HTML, Plain Text | 重要なエラー通知 |
9 | チャットツール | Slack, Tearms, Discord | 運用チームへの即時通知 |
Visual Studio C# Serilogのログレベル一覧(レベルの低い順)
順位 | レベル | 機 能 |
---|---|---|
1 | Verbose | 最も詳細なログレベル。すべての動作を記録 |
2 | Debug | 開発・トラブルシュート用 |
3 | Information | 主要なイベント(起動、終了、処理完了など)を記録 |
4 | Warning | 警告(問題の可能性あり) |
5 | Error | エラー(処理が失敗した場合、例外情報も含む) |
6 | Fatal | 致命的なエラー(アプリケーションがクラッシュするような重大な問題) |
Visual Studio C# Serilogの使用手順
NuGet Serilogパッケージのインストール
- ソリューションエクスプローラー画面の「プロジェクト」を右クリック→「NuGetパッケージの管理」画面から下記のパッケージをインストールします。
- Serilog 4.3.0
- Serilog.Sinks.Console 6.0.0
- Serilog.Sinks.Debug 3.0.0
- Serilog.Sinks.File 7.0.0
■パッケージのインストール結果

Visual Studio C# Serilogの初期設定
アプリケーションの開始時、通常は「Main」
やアプリケーションの初期化時にSerilogを設定します。
■設定例
public Form1()
{
InitializeComponent();
// フォームを画面の中央に表示
this.StartPosition = FormStartPosition.CenterScreen;
//---------------------------------------------------------------------------------
// Serilogの初期設定
//---------------------------------------------------------------------------------
// LoggerConfiguration インスタンスの作成
Log.Logger = new LoggerConfiguration()
// 出力先の設定 コンソール/デバッグウィンドウ/ログファイル
.WriteTo.Console()
.WriteTo.Debug()
//rollingInterval: RollingInterval.Day ログファイルを日ごとに作成
//ログファイルにはWarningレベル以上のログが記録される
.WriteTo.File(@"C:\temp\Serilog\serilog_code.txt",
restrictedToMinimumLevel: LogEventLevel.Warning,
rollingInterval: RollingInterval.Day)
//コンソール・デバッグウィンドウには、Debugレベル以上のログが記録される
.MinimumLevel.Debug()
.CreateLogger();
}
- 出力先の設定
- 本設定では、コンソールとデバッグウィンドウ及びログファイル
- 出力レベルの設定
- 両方のウィンドウにはDebugレベル以上のメッセージを出力(.MinimumLevel.Debug())
- ログファイルにはWarningレベル以上のメッセージを出力(restrictedToMinimumLevel: LogEventLevel.Warning,)
- ログファイルの作成周期
- 一日ごとに別ファイルとして作成(rollingInterval: RollingInterval.Day)
ログ出力先の設定例
- コンソール
- .WriteTo.Console()
- デバッグウィンドウ
- .WriteTo.Debug()
- ファイル出力
- .WriteTo.File(@”C:\temp\Serilog.txt”, restrictedToMinimumLevel: LogEventLevel.Warning,
rollingInterval: RollingInterval.Day)
- .WriteTo.File(@”C:\temp\Serilog.txt”, restrictedToMinimumLevel: LogEventLevel.Warning,
- SQL Server
- .WriteTo.MSSqlServer(“Server=myServer;Database=myDB;User Id=myUser;Password=myPassword;”, “Logs”)
- Elasticsearch
- .WriteTo.Elasticsearch(new Serilog.Sinks.Elasticsearch.ElasticsearchSinkOptions(new Uri(“http://localhost:9200”)))
- Syslog(Linux向け)
- .WriteTo.Syslog()
- メール通知
- .WriteTo.Email(new EmailConnectionInfo{FromEmail = “noreply@example.com”,ToEmail = “admin@example.com”,MailServer = “smtp.example.com”})
- Slack通知
- .WriteTo.Slack(“https://hooks.slack.com/services/your/webhook/url”)
ファイル出力設定の主な設定項目一覧
ファイル出力設定では、さまざまなオプションを指定できます。以下に、主な設定項目を一覧にまとめました。
№ | 設定項目 | 説 明 | 設定例 |
---|---|---|---|
1 | Path | ログファイルの保存場所 | “C:/logs/Serilog.txt” |
2 | rollingInterval | ローテーション間隔 | RollingInterval.Day |
3 | retaindFileCour | 保持するログファイルの最大数 | 7(7日分) |
4 | fileSizeLimitByte | ログファイルの最大サイズ | 10485760(10MB) |
5 | buffered | 書き込みのバッファリング | true(バッファリング有効) |
6 | flushToDiskInterval | ディスクへの書き込み間隔 | TimeSpan.FromSeconds(5) |
7 | outputTemplate | ログのフォーマット | {Timestamp:yyyy-MM-dd} |
8 | fotmatter | JSON形式等のフォーマット指定 | new CompactJsonFotmatter() |
9 | restrictedToMinimumLevel | 出力する最低ログレベル | LogEventLevel.Warning |
■設定例
- 下記設定では、1日ごとにログファイルを作成し、最大7日分保持、10MBを超えたら新しいファイルを作成するようになっています。
- また、Warning以上のログのみ記録され、バッファリングを有効化してパフォーマンスを向上させています。
Log.Logger = new LoggerConfiguration()
.WriteTo.File("logs/log.txt",
rollingInterval: RollingInterval.Day, // 日毎にログファイルを作成
retainedFileCountLimit: 7, // 7日文のログを保持
fileSizeLimitBytes: 10485760, // 10MBを超えたら新しいファイルを作成
buffered: true, // バッファリングを有効化
flushToDiskInterval: TimeSpan.FromSeconds(5), // ディスクへの書き込み間隔 5秒
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}",
// ログの表示例 2025-06-08 12:33:20 [Error] データベース接続エラー
// {NewLine}{Exception}:例外が発生した場合、詳細なスタックトレースを表示
restrictedToMinimumLevel: LogEventLevel.Warning) // Warning以上のログのみ記録
.CreateLogger();
Visual Studio C# JSONファイルによるSerilogの設定
- 設定をJSONファイルで管理する利点
- ソースコードを変更せずにログの設定が可能となる
- 環境ごとに異なる設定を利用する事ができる(例:serilog.dev.json、serilog.prod.json等)
上記だけでも利便性は相当に高いと言えます。
■serilog.jsonの例
この設定では、コンソールにはDebugレベル以上、ファイルにはWarningレベル以上のログを出力するようにしています。
{
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "Console",
"Args": { "restrictedToMinimumLevel": "Debug" }
},
{
"Name": "File",
"Args": {
"path": "C:/temp/Serilog/serilog_json.txt",
"rollingInterval": "Day",
"restrictedToMinimumLevel": "Warning"
}
}
],
"Enrich": [ "WithMachineName", "WithThreadId" ]
}
}
設定手順
serilog.json
の作成- プロジェクトのルートディレクトリ(
bin
フォルダの外)に作成します
内容は上記通り。
- プロジェクトのルートディレクトリ(

- JSON設定の読み込み
- C#のコードでJSONファイルを読み込むには下記のパッケージが必要となるので、NuGetパッケージからインストールします。
- Microsoft.Extensions.Configuration.Json
- Serilog.Settings.Configuration
- C#のコードでJSONファイルを読み込むには下記のパッケージが必要となるので、NuGetパッケージからインストールします。

- serilog.jsonファイルのプロパティ設定
- ファイルを「右クリック」→「プロパティ」でプロパティを表示し、下記項目を設定
- ビルドアクション:コンテンツ
- 出力ディレクトリコピー:新しい場合はコピーする
- ファイルを「右クリック」→「プロパティ」でプロパティを表示し、下記項目を設定
- プロパティの設定の意味
- ビルド時に設定ファイルを
bin
フォルダへコピー - 実行時に
serilog.json
を参照できる(アプリが正しくログ出力できる) - ファイルが変更された場合のみコピーされるため、不要な更新を防ぐ
- ビルド時に設定ファイルを

Visual Studio C# Serilog 動作確認
Serilogの「コード内」設定と「JSONファイル」設定も、下記の簡単なプログラムコードを実行して検証します。
- 設定した条件
- コンソール画面には、Debugレベル以上のエラーを出力する
- ログファイルには、Warningレベル以上のエラーを出力する
using Serilog;
using Serilog.Events;
//---------------------------------------------------------------------------------
// Serilogの初期設定
//---------------------------------------------------------------------------------
try
{
// LoggerConfiguration インスタンスの作成
Log.Logger = new LoggerConfiguration()
// 出力先の設定 コンソール/デバッグウィンドウ/ログファイル
.WriteTo.Console()
.WriteTo.Debug()
//rollingInterval: RollingInterval.Day ログファイルを日ごとに作成
.WriteTo.File(@"C:\temp\Serilog\serilog_code.txt",
restrictedToMinimumLevel: LogEventLevel.Warning,
rollingInterval: RollingInterval.Day)
//Debug 以上のログレベルのログが記録される
.MinimumLevel.Debug()
.CreateLogger();
Log.Information("Information:コード内の、Serilog設定が適用されました。Fileには表示されない。");
Log.Verbose("Verbose:ログに表示されないメッセージ。Fileには表示されない。");
Log.Debug("Debug:プログラムが開始しました。");
Log.Warning("Warning:警告エラーメッセージ");
for (int i = 0; i < 10; i++)
{
int doubled = i * 2;
//logger.Info($"NLog ループ {i}:2 倍の値 = {doubled}");
Log.Debug($"ループ {i}:2倍の値 = {doubled}" + " Fileには表示されない。");
}
// 故意に例外を発生させるためのコード
int val_1 = 10;
int val_2 = 0;
int result = val_1 / val_2;
}
catch (Exception ex)
{
// 例外が発生した場合
Log.Error(ex, "Error:アプリケーションでエラーが発生しました");
Log.Fatal(ex, "Fatal:アプリケーションで致命的なエラーが発生しました");
}
finally
{
// アプリケーション終了時のログ
Log.Information("プログラムが終了しました");
}
Visual Studio C# コード内でSerilogを設定した場合
下記の出力結果を見ると、想定通りに動作した事が確認できました。
■コンソール画面への出力結果

■ログファイルへの出力結果

Visual Studio C# JsonファイルでSerilogを設定した場合
■コンソール画面への出力結果

■ログファイルへの出力結果

Visual Studio C# Serilog まとめ(NLogと比較して)
NLogとSerilogはどちらもC#のログ記録ライブラリとして広く使われていますが、それぞれに優れた点とデメリットがあります。
一般的に、NLogはレガシーシステムや高パフォーマンスを求めるアプリケーションで使われることが多く、Serilogはクラウド環境や構造化ログを活用するプロジェクトで人気があります。
最近では、Serilogの採用が増えている傾向があるようですが、用途によって適したライブラリを選択する事が重要です。