知識マップ: 自作ロガーの最小要件と結合テストチェックリスト

記事「自作ロガーの最小要件と結合テストチェックリスト」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この記事は障害調査用の自作ロガーについて、UTF-8のJSON Linesを形式とし、logSessionIdとprocessIdを含む必須項目・single writerとbounded queueによる書き込み設計・flush条件・回転と保持・保存失敗時の明示的な通知までを最小要件として整理します。既製のMicrosoft.Extensions.Logging・Serilog・NLog・spdlogが使える場合はそちらが優先され、自作は依存を増やせないなどの制約があるときの選択肢です。logSessionIdを起動時刻とプロセスIDだけで作るとOSによるPIDの再利用で衝突しログが混ざるため、GUIDを足す設計が必要になります。最後に、実ファイル・実スレッド・実プロセスでの結合テストと行単位の機械検証によって、自作ロガーの信頼性を確認する方法を示します。

自作ロガーの知識マップ自作ロガーがJSON Lines・logSessionId・single writer・bounded queue・flush・回転保持をどう組み合わせるか、既製フレームワーク(ILogger・Serilog・NLog・spdlog)との使い分け、結合テストでの検証観点の関係を示す図利用する前提とする前提とする利用する前提とする利用する利用する利用する利用する推奨される対応用いるのは非推奨防止する原因になり得るで確認できる利用する推奨される対応推奨される対応推奨される対応推奨される対応推奨される対応推奨される対応自作ロガーロガーの結合テストJSON LinesログのsessionIdprocessId(ログ項目)single writer(単一書き込み口)bounded queue(上限付きキュー)flush(ログの同期書き出し)ログの回転(ローテーション)ログの保持(リテンション)1プロセス1ファイル複数プロセスによる同一ログファイルへの追記sessionIdの衝突別々の起動のログレコードの混在ログレコードの機械検証Microsoft.Extensions.Logging(ILogger)障害調査用の診断ログSerilogNLogspdlog保存失敗時の明示的な失敗通知

概念間の関係(全21件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

自作ロガー
既製のログフレームワークを使えない事情がある場合に、アプリケーション自身が実装する障害調査用の診断ログの仕組み。
ロガーの結合テスト
文字列整形やJSON化のユニットテストだけでは拾えないI/O・並行性・回転・終了時flush・権限エラーを、実ファイル・実スレッド・実プロセスで確認するテスト。
bounded queue(上限付きキュー)
呼び出し側はキューに積むだけですぐ戻り、実際の書き込みはsingle writer側が行う、上限のあるキュー。あふれたときの方針を決める必要がある。
1プロセス1ファイル
ログファイルへの書き込み主体を1プロセスにつき1ファイルへ限定する、自作ロガーの基本方針。
複数プロセスによる同一ログファイルへの追記
複数プロセスが同じログファイルへ追記する設計。排他制御・部分書き込み・回転タイミング・異常終了時の扱いが一気に難しくなる。
ログのsessionId
プロセスの1回の起動を1セッションとして採番し、同じ起動のログをまとめて追跡するための、ログレコードの必須項目。
sessionIdの衝突
起動時刻とプロセスIDだけでsessionIdを作った場合に、OSによるプロセスIDの再利用やローカル時刻の巻き戻りで前回と同じ値になり得ること。
Microsoft.Extensions.Logging(ILogger)
.NET標準のログAPI。ログレベル・カテゴリ・出力先を差し替えるプロバイダーの仕組みを持ち、多くの.NET SDKに暗黙の参照として含まれる。
Serilog
構造化イベントを前提にした.NET向け診断ログライブラリ。メッセージテンプレートのパラメーターに名前を付け、値をイベントのプロパティとして保持する。
NLog
構造化ログと従来型ログの両方に対応する.NET向けログライブラリ。JSONレイアウトや自動命名・アーカイブ付きのファイル出力を持つ。
spdlog
C++11以降で使えるログライブラリ。サイズで切り替えるrotatingと日付で切り替えるdailyのファイル出力を持つ。
保存失敗時の明示的な失敗通知
ログ保存先が使えないときに黙って別の場所へ書かず、アプリの通知・イベントログ・標準エラーなど明示的な手段で失敗を表に出す設計方針。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。