トレースは、アプリケーションの実行中に生成される特定のメッセージの発行です。 トレースを使用する場合は、送信されたメッセージを収集および記録するためのメカニズムが必要です。 トレース メッセージはリスナーによって受信されます。 リスナーの目的は、トレース メッセージを収集、格納、およびルーティングすることです。 リスナーは、ログ、ウィンドウ、テキスト ファイルなどの適切なターゲットにトレース出力を送信します。
このようなリスナーの 1 つである DefaultTraceListenerは、トレースが有効になると自動的に作成され、初期化されます。 トレース出力を追加のソースに送信する場合は、追加のトレース リスナーを作成して初期化する必要があります。 作成するリスナーは、個々のニーズを反映している必要があります。 たとえば、すべてのトレース出力のテキスト レコードが必要な場合があります。 この場合は、有効にすると、すべての出力を新しいテキスト ファイルに書き込むリスナーを作成します。 一方で、アプリケーションの実行中にのみ出力を表示したいかもしれません。 その場合は、すべての出力をコンソール ウィンドウに送信するリスナーを作成できます。 EventLogTraceListenerはトレース出力をイベント ログに送ることができ、TextWriterTraceListenerはトレース出力をストリームに書き込むことができます。
トレースの有効化
トランザクション処理中にトレースを有効にするには、アプリケーションの構成ファイルを編集する必要があります。 以下に例を示します。
<configuration>
<system.diagnostics>
<sources>
<source name="System.Transactions" switchValue="Warning">
<listeners>
<add name="tx"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "tx.log" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
System.Transactions トレースは、"System.Transactions" という名前のソースに書き込まれます。
addを使用して、使用するトレース リスナーの名前と種類を指定できます。 この構成例では、リスナーに "tx" という名前を付け、使用する型として標準の .NET Framework トレース リスナー (XmlWriterTraceListener) を追加しました。
initializeDataを使用して、そのリスナーのログ ファイルの名前を設定します。 さらに、完全修飾パスを単純なファイル名に置き換えることができます。
各トレース メッセージの種類には、重要度を示すレベルが割り当てられます。 アプリ ドメインのトレース レベルがイベントの種類のレベル以下の場合、そのメッセージが生成されます。 トレース レベルは、構成ファイルの switchValue 設定によって制御されます。 診断トレース メッセージに関連付けられているレベルは、次の表で定義されています。
| トレース レベル | 説明 |
|---|---|
| 危うい | 次のような重大なエラーが発生しました。 - ユーザー機能がすぐに失われる可能性があるエラー。 - 機能の損失を回避するために管理者がアクションを実行する必要があるイベント。 - コードのハング。 - このトレース レベルでは、他の重要なトレースを解釈するための十分なコンテキストを提供することもできます。 これは、重大な障害につながる一連の操作を識別するのに役立ちます。 |
| エラー | エラー (構成やネットワークの動作が無効など) が発生し、ユーザー機能が失われる可能性があります。 |
| Warnung | その後、エラーまたは重大なエラー (割り当ての失敗や制限に近づくなど) が発生する可能性がある条件が存在します。 ユーザー コードからのエラーの通常の処理 (トランザクションの中止、タイムアウト、認証失敗など) も警告を生成できます。 |
| 情報 | システムの状態の監視と診断、パフォーマンスの測定、またはプロファイリングに役立つメッセージが生成されます。 これには、トランザクションの作成やコミット、重要な境界の突破、重要なリソースの割り当てなどのような、トランザクションと登録のライフタイムイベントを含めることができます。 その後、開発者は、このような情報を容量計画とパフォーマンス管理に利用できます。 |
トレース コード
次の表に、 System.Transactions インフラストラクチャによって生成されるトレース コードを示します。 テーブルには、トレース コード識別子、トレースの EventType 列挙レベル、およびトレースの TraceRecord に含まれる追加データが含まれます。 さらに、トレースの対応するトレース レベルも TraceRecord に格納されます。
| トレースコード | イベントの種類 | TraceRecord の追加データ |
|---|---|---|
| トランザクションが作成されました | 情報 | TransactionTraceId |
| TransactionPromoted | 情報 | ローカルトランザクショントレースID、分散トランザクショントレースID |
| 加入作成 | 情報 | TransactionTraceId、EnlistmentTraceId、EnlistmentType (durable/volatile)、EnlistmentOptions |
| EnlistmentCallbackNegative | Warnung | トランザクション・トレースID、エンリストメント・トレースID、 コールバック (forcerollback/aborted/indoubt) |
| トランザクションロールバックコール | Warnung | TransactionTraceId |
| トランザクション中止 | Warnung | TransactionTraceId |
| TransactionInDoubt | Warnung | TransactionTraceId |
| トランザクションスコープ作成済み | 情報 | TransactionScopeResult (次のようになります) - 新しいトランザクション。 - トランザクションが承認されました。 - 渡された依存トランザクション。 - 現在のトランザクションを使用する。 - トランザクションなし。 新しい現在の TransactionTraceId |
| TransactionScopeDisposed | 情報 | スコープの "想定される" 現在のトランザクションの TransactionTraceId。 |
| トランザクション範囲未完了 | Warnung | スコープの "想定される" 現在のトランザクションの TransactionTraceId。 |
| トランザクションスコープのネストが不正です | Warnung | スコープの "想定される" 現在のトランザクションの TransactionTraceId。 |
| No change needed; keep the original untranslated due to its technical nature as a specific term likely used in code. | Warnung | 古い (現在の) TransactionTraceId、他の TransactionTraceId |
| トランザクションスコープタイムアウト | Warnung | スコープの "想定される" 現在のトランザクションの TransactionTraceId。 |
| 依存クローン作成完了 | 情報 | TransactionTraceId、作成された依存トランザクションの種類 (RollbackIfNotComplete/BlockCommitUntilComplete) |
| 依存クローン完了 | 情報 | TransactionTraceId |
| 回復完了 | 情報 | リソース マネージャー GUID (ベースから) |
| 再登録 | 情報 | リソース マネージャー GUID (ベースから) |
| トランザクションシリアライズ済み | 情報 | TransactionTraceId |
| トランザクション例外 | エラー | 例外メッセージ |
| 無効な操作例外 (InvalidOperationException) | エラー | 例外メッセージ |
| 内部エラー | 危うい | 例外メッセージ |
| TransferEvent | トランザクションが逆シリアル化されるか、 System.Transactions トランザクションから分散トランザクションに昇格されると、ExecutionContext からの現在の ActivityID と分散トランザクション ID が書き込まれます。 DTC がマネージド コードにコールバックすると、分散トランザクション ID は、コールバックの間、ExecutionContext の ActivityID として設定されます。 |
|
| 設定されたデフォルトのタイムアウト調整済み | Warnung | 追加データなし |
| トランザクションタイムアウト | Warnung | タイムアウトしているトランザクションのトランザクション識別子(TransactionTraceId)。 |
上記の各追加データ項目の XML スキーマの形式は次のとおりです。
取引トレース識別子
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
< CloneIdentifier >
the clone id number
</CloneIdentifier>
</TransactionTraceIdentifier>
EnlistmentTraceIdentifier (エンリストメントトレースアイデンティファイヤ)
<EnlistmentTraceIdentifier>
<ResourceManagerId>
string form of guid
</ResourceManagerId>
<TransactionTraceIdentifier>
<TransactionIdentifier >
string representation of transaction id
</TransactionIdentifier>
<CloneIdentifier >
the clone id number
</CloneIdentifier>
<TransactionTraceIdentifier>
<EnlistmentIdentifier>
the enlistment id number
</EnlistmentIdentifier>
</EnlistmentTraceIdentifier>
Resource Manager 識別子
<ResourceManagerId>
string form of guid
</ResourceManagerId>
トレースに関するセキュリティ問題
管理者がトレースを有効にすると、既定で公開されているトレース ログに機密情報が書き込まれる可能性があります。 セキュリティ上の脅威を軽減するには、共有とファイル システムのアクセス許可によって制御される安全な場所にトレース ログを格納することを検討する必要があります。
.NET