C#.Netでのログ記録まとめ

投稿者: | 2021年4月23日

C#のログ記録はサードパーティーのフレームワークと組み込みのログ記録の2種類に分けられ、それらのログ記録の手段を後から変更しやすくする橋渡し役のライブラリが存在します。C#のログ記録方法について備忘録を書きます。

主要なログ記録フレームワーク

色々ありますが2021年の時点ではNLogかSerilogの2種類(Nog4Netは開発休止)が主要です。

2つのフレームワークはログの構成方法に優劣があるので、コードベースか外部ファイルで作るかで選定するのが良さそう。

  • Serilog・・・コードベースで構成するのが得意、リリース後に構成を変更しない場合に採用
  • NLog・・・・xmlファイルで構成するのが得意、リリース後に構成を変更したい場合に採用

ログ構成はコードベースかxmlファイル(外部ファイル)で作るべきかの見解を述べますと、
 コードベースだとIDEによるインテリジェンスとコンパイルエラーで記述ミス防止できる
 外部ファイルだとリリース後に本番機や試験機でログ構成を変更できる
という双方にメリットがあります。

優劣はありますがフレームワークを変える必要があるほどの差はないはずなので、既に採用されているロギングフレームワークを使いづづけるのが良いと思います。

組み込みのログ記録

Microsoft.Diagnostics.Traceを使うのが一般的。それ以外は低レベルのAPIなので使ったことがない。

Microsoft.Diagnostics.Trace・・・・・・静的クラスなのでシンプルに使いやすい
TraceSource・・・・・・・・・・・・・Microsoft.Diagnostics.Traceのクラス版。自作のTraceクラスを作れる
System.Diagnostics.DiagnosticSource・・イベント情報収集用?日本語の情報が少ない

ログ記録APIラッパー

これらのログ記録の手段を後から変更できるように独自のAPIラッパーを作ることがありますが、C#にはMicrosoft.Extensions.Loggingフレームワークがあるので基本的にこれを使います。

このライブラリを使うと下記の恩恵があって使い勝手はかなり良かった。

・ログフレームワークの切り替えが楽
・ログの出力箇所をテキストファイル、デバッグ・ユニットテストの複数に書き込み可能
・任意で名前空間のログはWarningレベル以上しか残さない設定が作れる
・特定のExceptionが発生したらサーバにエラーを通知するといった、独自のログ監視機構が作れる

Microsoft.Extentions.Configuration.Jsonを使えばこのライブラリのログ構成も外部ファイル化することができます。

さいごに

所感ですが、トレースログは下記ライブラリを導入してNLogをAPIラッパー経由で出力させるのが好きです。

  • Microsoft.Extensions.Logging.Configuration
  • NLog.Extentions.Logging

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)