C#/.NET で開発を行う際、ログ出力はアプリケーションの動作確認やトラブルシューティングに欠かせません。.NET には標準で ILogger
インターフェースが用意されており、柔軟にログを扱えます。また外部ライブラリの Serilog を組み合わせることで、より高度なログ管理が可能になります。本記事では ILogger
の基本と Serilog の導入方法を解説します。
ILoggerの基本
.NET では組み込みのロギング機能として Microsoft.Extensions.Logging
が提供されています。ILogger
インターフェースを利用すると、ログの出力先を切り替えやすく、標準出力やファイル、クラウドサービスなどに簡単に対応できます。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
class Program
{
static void Main()
{
// DIコンテナを構築
using var serviceProvider = new ServiceCollection()
.AddLogging(builder =>
{
builder.AddConsole(); // コンソール出力を追加
})
.BuildServiceProvider();
var logger = serviceProvider
.GetRequiredService<ILogger<Program>>();
logger.LogInformation("アプリケーション開始");
logger.LogWarning("注意: 設定ファイルが見つかりません");
logger.LogError("エラーが発生しました");
}
}
このように ILogger
を使えば、アプリ全体で一貫したログ管理ができます。
ログレベル
ILogger
ではログの重要度に応じてレベルを指定できます。
LogTrace
… 詳細なデバッグ情報LogDebug
… 開発時のデバッグ情報LogInformation
… 通常の実行状況LogWarning
… 注意すべき事象LogError
… エラー(処理続行可能)LogCritical
… 致命的なエラー
環境に応じてログレベルを調整することで、必要な情報だけを効率よく収集できます。
Serilogの導入
Serilog は強力なサードパーティ製のロギングライブラリです。構造化ログ(JSON形式など)をサポートし、ファイルやデータベース、クラウドへの出力を簡単に設定できます。
NuGet で以下のパッケージを追加します。
dotnet add package Serilog
dotnet add package Serilog.Extensions.Logging
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
Serilogの基本的な設定
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
class Program
{
static void Main()
{
// Serilog の設定
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
using var serviceProvider = new ServiceCollection()
.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddSerilog();
})
.BuildServiceProvider();
var logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogInformation("アプリケーション開始");
logger.LogError("処理中にエラーが発生しました");
}
}
この例ではコンソールとファイルの両方にログを出力します。rollingInterval: RollingInterval.Day
により、日ごとに新しいログファイルが生成されます。
まとめ
ログ出力は開発・運用の両面で重要な仕組みです。
ILogger
を使うと一貫したログ管理が可能- ログレベルを活用して必要な情報を取捨選択できる
- Serilog を組み合わせると構造化ログや複数出力先に対応可能
小規模なアプリケーションでも標準の ILogger
を活用し、大規模・本番環境では Serilog を導入するのがベストプラクティスです。