--- primary_layer: cross related_layers: [layer2, layer3, layer4] page_type: concept --- # 診断と観測 問題や実行時情報の種類ごとに、異なる報告機構を使います。 次の境界により、プログラミングエラー、ユーザーが対処できる通知、実行時メッセージ、構造化データ、コンパイラ結果を区別します。 | 目的 | 担当 | |---|---| | 開発者がコードを修正すべき誤用または不正な設定 | 例外 | | ユーザーがコードまたは設定で修正すべき問題の通知 | `warnings.warn` | | 実行中の診断、進捗、数値異常 | `saealib.*`ロガーによる標準の`logging` | | 解析と可視化のための世代ごとの構造化された数値記録 | Historyチャンネル | | 実行の観測と拡張ポイント | `CallbackManager` | | Compilerの解析結果の一方向の引き渡し | `Diagnostic` / `DiagnosticBag` | ## 実行時のロギング saealibはロギング出力ハンドラーを設定せず、`NullHandler`だけを登録します。 したがって、ログメッセージを表示するかどうかはユーザーの`logging`設定に依存します。 レベルを有効にしてハンドラーを追加する例は[進捗のログ記録](../../tutorials/logging.md)を参照してください。 `verbose=False`は進捗コールバックハンドラーの登録を防ぐだけです。 これはロギング出力の設定とは独立しており、ロギングハンドラーの登録解除や再設定は行いません。 代表的な実行時メッセージには、実行の開始と終了を示すINFO、解決済み設定と実行時の動作を示すDEBUG、スケジューラーの復旧や数値問題を示すWARNINGがあります。 ロギングメッセージの文言とフィールドは安定したAPIとして保証されません。利用側は個々のメッセージを解析せず、レベルとロガー名前空間を設定してください。 ## 構造化された履歴とコールバック 世代をまたいで収集し、解析や可視化への入力とする構造化された数値記録には、Historyチャンネルを使います。 これにより、データ利用側が人間可読なログメッセージに依存せずに済みます。 `CallbackManager`は実行イベントの観測と拡張の境界です。 進捗ハンドラー、カスタムロギング、履歴収集を駆動できますが、例外やユーザー向け警告の代替ではありません。 イベントの登録と観測の詳細は[CallbackManager](callbacks.md)を参照してください。 ## Compilerの診断 Compilerの規則は解析結果を一方向に渡します。規則は`Diagnostic`値を生成し、それらを`DiagnosticBag`に収集してコンパイル結果とともに返します。 呼び出し側は、それらの診断をどのように表示または処理するかを決められます。 Compilerの診断は実行時ログメッセージではないため、`logging`経由で送ってはいけません。 コンパイルと検証の境界は[Compiler](../../framework/compiler.md)を参照してください。