この記事では、レガシの Event Tracing for Windows (ETW) ロガーと Microsoft Dynamics 365 Commerce の EventLog ロガーの機能を比較します。
イベント定義の新しい分散化の性質により、Dynamics 365 Commerce はバージョン 10.0.32 の時点で ETW ロガーを使用したイベント記録はできなくなりました。 代わりに、EventLog ロガーを使用する必要があります。 EventLog ロガーは Microsoft.Extensions.Logging フレームワークに基づいており、構造化されたログ パターンを使用してログの生成と管理を簡素化します。
EventLog ロガーは構造化された XML イベント データを記録し、元のログ レベルなどの追加情報を含めます。 構造化された XML イベント データは、イベント ビューアーの XPath (フィルター > XML > クエリの手動編集) などを使用してフィルター処理およびクエリできます。 Commerce バージョン 10.0.21 からバージョン 10.0.32 への移行時に、ETW ロガーおよび EventLog ロガーの両方が有効化されました。 ただし、ETW ロガーはバージョン 10.0.32 で Commerce から削除されました。
次のロガー比較では、例で Retail Server ログを使用しています。
ログの場所
ETW
ETW ロガーの場合、イベント ビューアー イベントは次の例に示すように、アプリケーションとサービス ログ > Microsoft > Dynamics の下のプロバイダー固有のディレクトリに配置されます。
EventLog
EventLog ロガーの場合、イベント ビューアー イベントは次の例に示すように、Windows ログの下のアプリケーション ログに配置されます。
アプリケーション ログでは、プロバイダーからのログはソース プロパティの値によってグループ化されます。 次の図の例では、ソースは Microsoft Dynamics - Retail Server です。
ログ構造
ETW
レガシ イベント
ETW ロガーの場合、次の図の例に示すように、レガシ イベント ビューアーのイベントは、マニフェストに従って記録および表示されます。
新しいイベント
ETW ロガーでは、構造化されたログのサポートが制限されているため、次の表に示すように、すべての新しいイベントは "GenericStructuredLogging" イベントとしてログに記録されます。
構造化されたログ メソッド名 | 翻訳済みメソッド名 | イベント ID |
---|---|---|
LogCritical | GenericStructuredLoggingCritical | 65000 |
LogError | GenericStructuredLoggingError | 65001 |
LogWarning | GenericStructuredLoggingWarning | 65002 |
LogInformation | GenericStructuredLoggingInformation | 65003 |
LogDebug | GenericStructuredLoggingDebug | 65004 |
マニフェスト制限のため、一般的なプロパティと最も頻繁に使用されるプロパティだけが、個別のイベント データ エントリとして記録されます。 次の例の図に示すように、残りのプロパティは、集計された JavaScript Object Notation (JSON) オブジェクトとしてログ記録されます。
EventLog
レガシ イベント
EventLog ロガーの場合、レガシ イベント ビューアー イベントは下位互換性のためにレガシ形式でログ記録されます。 たとえば、次の図の例に示すように、フォーマットされたメッセージのみがログに記録されます。
新しいイベント
EventLog ロガーの場合、新しいイベント ビューアー イベントを構造化された形式で記録され、より多くの情報を提供し、正確なフィルター処理とクエリを可能にします。 たとえば、次の例の図に示すように、フォーマットされたメッセージと状態およびスコープのすべてのプロパティの両方が、個別のイベント データ エントリとしてログに記録されます。
構造化されたイベントのクエリおよびフィルター処理
イベント ビューアーのユーザー インターフェイス (UI) を使用して、特定のプロバイダやログ レベルなどの基準による基本的なフィルター処理を実行できます。
ETW
ETW ロガーの場合、次の例の図に示すように、構造化された情報ログをフィルター処理してクエリすることができます。 この例では、イベント ログの場所は Microsoft-Dynamics-Retail-Server の下にあると指定され、イベント ソースの値は Commerce-RetailServer です。
EventLog
EventLog ロガーの場合、次の例の図に示すように、構造化された情報ログをフィルター処理してクエリすることができます。 この例では、イベント ログの場所はアプリケーションの下にあると指定され、イベント ソースの値は Microsoft-Dynamics-Retail-Server です。
高度なフィルター
イベント ビューアーを使用すると、XPath クエリの サブセットをフィルター処理に使用できます。 イベント名や元のログ レベルなど、フィルター処理されたカスタム ビューのフィルターを保存できます。 フィルタをカスタム ビューとして保存すると、後から簡単に同じタスクや類似のタスクを実行できます。 たとえば、新しい XPath クエリを書き込む代わりに、フィルターでイベント名を置き換えることができます。
イベント名によるフィルター処理
ETW
ETW ロガーを使用して特定のイベントを検索するには、次の例と XML コード ブロックの例に示すように、XPath を介してイベント名でクエリを実行できます。
<QueryList>
<Query Id="0" Path="Microsoft-Dynamics-Commerce-RetailServer/Operational">
<Select Path="Microsoft-Dynamics-Commerce-RetailServer/Operational">
*[EventData[Data[@Name='eventName'] and (Data='Microsoft.Dynamics.Retail.RetailServerLibrary.Authentication.JsonWebKeySetResolver+Events.KeyFoundAfterJwksForceRefresh')]]
</Select>
</Query>
</QueryList>
このクエリは、イベント名 Microsoft.Dynamics.Retail.RetailServerLibrary.Authentication.JsonWebKeySetResolver+Events.KeyFoundAfterJwksForceRefresh を持つ Microsoft-Dynamics-Commerce-RetailServer/Operational ログからすべてのログを表示します。
EventLog
EventLog ロガーの場合、構造化ログは、イベントが EventName の値によって一意に識別可能であると想定しています。 EventId 値は、既定の列挙 (列挙型) 値です。 イベントはリポジトリとクラスに分散されるため、単純な整数である EventId 値の一意性を適用する実行可能な方法はありません。
EventLog ロガーを使用して特定のイベントを検索するには、次の例と XML コード ブロックの例に示すように、XPath を介してイベント名でクエリを実行できます。
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">
*[System[Provider[@Name=
'Microsoft Dynamics - Retail Server']] and
EventData[Data and
(Data=
'EventName: Microsoft.Dynamics.Retail.RetailServerLibrary.Authentication.JsonWebKeySetResolver+Events.KeyFoundAfterJwksForceRefresh')]]</Select>
</Query>
</QueryList>
このクエリは、Microsoft Dynamics - Retail Server プロバイダーおよびイベント名 Microsoft.Dynamics.Retail.RetailServerLibrary.Authentication.JsonWebKeySetResolver+Events.KeyFoundAfterJwksForceRefresh を持つアプリケーション ログからのすべてのログを表示します。
元のログ レベルによるフィルター処理
EventLog ロガーは、次の入力タイプをサポートしています:
- エラー
- 警告
- 情報
- SuccessAudit
- FailureAudit
EventLog ロガーは、さまざまなサブシステムからログ レベルをマッピングして、入力タイプの制限に一致させます。 詳細については、EventLogEntryType 列挙を参照してください。
次の表に、サブシステム間の現在のログ レベル マッピングを示します。
EventLevel (レガシ イベント) | LogLevel (Microsoft.Extensions.Logging) | EventLogEntryType |
---|---|---|
未定義 | なし | ログに記録されていません |
LogAlways | 重大 | エラー |
重大 | 重大 | エラー |
エラー | エラー | エラー |
警告 | 警告 | 警告 |
情報 | 情報 | 情報 |
詳細 | デバッグ | 情報 |
(対応する EventLevel はありません) | 追跡 | 情報 |
より正確なフィルター処理を可能にするために、Microsoft.Extensions.Logging からの元のログ レベルに関する情報が、イベントの一部として格納されます。 次のクエリの例が示すように、このアプローチでは、XPath を介して元のログ レベルでクエリを実行できます。
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">
*[System[Provider[@Name=
'Microsoft Dynamics - Retail Server']] and
EventData[Data and
(Data=
'LogLevel: Information')]]</Select>
</Query>
</QueryList>
このクエリは、Microsoft Dynamics - Retail Server プロバイダーと情報の元のログ レベルを持つアプリケーション ログからのすべてのログを表示します。 したがって、情報ログを、デバッグおよび追跡ログから分離できます。