目次
C#のログ記録はサードパーティーのログ記録と組み込みのログ記録の2種類に分けられ、それらのログ記録の手段を後から変更しやすくする橋渡し役のラッパーライブラリが存在します。この3つのライブラリについて要約と個人的オススメの組み合わせを紹介。
サードパーティーのログ記録
2021年の時点ではNLogかSerilogの2種類(Nog4Netは開発休止)が主流です。
2つのフレームワークはログの構成方法に優劣があるので、コードベースか外部ファイルで作るかで選定するのが良さそう。
- Serilog・・・コードベースで構成するのが得意、リリース後に構成を変更しない場合に採用
- NLog・・・・xmlファイルで構成するのが得意、リリース後に構成を変更したい場合に採用
ログ構成はコードベースかxmlファイル(外部ファイル)で作るべきかの見解を述べますと、
コードベースだとIDEによるインテリジェンスとコンパイルエラーで記述ミス防止できる
外部ファイルだとリリース後に本番機や試験機でログ構成を変更できる
という双方にメリットがあります。
優劣はありますがフレームワークを変える必要があるほどの差はないはずなので、既に採用されているロギングフレームワークを使いづづけるのが良いと思います。
組み込みのログ記録
下記の3つ。C#に標準に備わっているMicrosoft.Diagnostics.Traceは誰もが使ったことがあるはず、それ以外は低レベルのAPIなので使ったことがないし情報も少ない。
Microsoft.Diagnostics.Trace・・・・・・静的クラスなのでシンプルに使いやすい
TraceSource・・・・・・・・・・・・・Microsoft.Diagnostics.Traceのクラス版。自作のTraceクラスを作れる
System.Diagnostics.DiagnosticSource・・イベント情報収集用?日本語の情報が少ない
ログ記録APIラッパー
上記で紹介したログ記録の手段を後から変更できるようにするAPIラッパー、Microsoft.Extensions.Loggingフレームワークが超便利。
このライブラリを使うと下記の恩恵があって使い勝手はかなり良かった。
・ログフレームワークの切り替えが楽
・ログの出力箇所をテキストファイル、デバッグ・ユニットテストの複数に書き込み可能
・任意で名前空間のログはWarningレベル以上しか残さない設定が作れる
・特定のExceptionが発生したらサーバにエラーを通知するといった、独自のログ監視機構が作れる
Microsoft.Extentions.Configuration.Jsonを使えばこのライブラリのログ構成も外部ファイル化することができます。
オススメの組み合わせ
所感ですが、トレースログは下記ライブラリを導入してNLogをAPIラッパー経由で出力させるのが好きです。
- Microsoft.Extensions.Logging.Configuration
- NLog.Extentions.Logging