次の方法で共有


ETW と EventLog のログ取得機能の比較

この記事では、レガシの 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 の下のプロバイダー固有のディレクトリに配置されます。

ETW ログの場所。

EventLog

EventLog ロガーの場合、イベント ビューアー イベントは次の例に示すように、Windows ログの下のアプリケーション ログに配置されます。

EventLog ログの場所。

アプリケーション ログでは、プロバイダーからのログはソース プロパティの値によってグループ化されます。 次の図の例では、ソースは Microsoft Dynamics - Retail Server です。

EventLog ログのソース。

ログ構造

ETW

レガシ イベント

ETW ロガーの場合、次の図の例に示すように、レガシ イベント ビューアーのイベントは、マニフェストに従って記録および表示されます。

ETW ログ構造。

新しいイベント

ETW ロガーでは、構造化されたログのサポートが制限されているため、次の表に示すように、すべての新しいイベントは "GenericStructuredLogging" イベントとしてログに記録されます。

構造化されたログ メソッド名 翻訳済みメソッド名 イベント ID
LogCritical GenericStructuredLoggingCritical 65000
LogError GenericStructuredLoggingError 65001
LogWarning GenericStructuredLoggingWarning 65002
LogInformation GenericStructuredLoggingInformation 65003
LogDebug GenericStructuredLoggingDebug 65004

マニフェスト制限のため、一般的なプロパティと最も頻繁に使用されるプロパティだけが、個別のイベント データ エントリとして記録されます。 次の例の図に示すように、残りのプロパティは、集計された JavaScript Object Notation (JSON) オブジェクトとしてログ記録されます。

ETW の新しいログ構造。

EventLog

レガシ イベント

EventLog ロガーの場合、レガシ イベント ビューアー イベントは下位互換性のためにレガシ形式でログ記録されます。 たとえば、次の図の例に示すように、フォーマットされたメッセージのみがログに記録されます。

EventLog のレガシ ログ構造。

新しいイベント

EventLog ロガーの場合、新しいイベント ビューアー イベントを構造化された形式で記録され、より多くの情報を提供し、正確なフィルター処理とクエリを可能にします。 たとえば、次の例の図に示すように、フォーマットされたメッセージと状態およびスコープのすべてのプロパティの両方が、個別のイベント データ エントリとしてログに記録されます。

EventLog の新しいログ構造。

構造化されたイベントのクエリおよびフィルター処理

イベント ビューアーのユーザー インターフェイス (UI) を使用して、特定のプロバイダやログ レベルなどの基準による基本的なフィルター処理を実行できます。

ETW

ETW ロガーの場合、次の例の図に示すように、構造化された情報ログをフィルター処理してクエリすることができます。 この例では、イベント ログの場所は Microsoft-Dynamics-Retail-Server の下にあると指定され、イベント ソースの値は Commerce-RetailServer です。

ETW の基本的なフィルター処理。

EventLog

EventLog ロガーの場合、次の例の図に示すように、構造化された情報ログをフィルター処理してクエリすることができます。 この例では、イベント ログの場所はアプリケーションの下にあると指定され、イベント ソースの値は Microsoft-Dynamics-Retail-Server です。

EventLog の基本的なフィルター処理。

高度なフィルター

イベント ビューアーを使用すると、XPath クエリの サブセットをフィルター処理に使用できます。 イベント名や元のログ レベルなど、フィルター処理されたカスタム ビューのフィルターを保存できます。 フィルタをカスタム ビューとして保存すると、後から簡単に同じタスクや類似のタスクを実行できます。 たとえば、新しい XPath クエリを書き込む代わりに、フィルターでイベント名を置き換えることができます。

イベント名によるフィルター処理

ETW

ETW ロガーを使用して特定のイベントを検索するには、次の例と XML コード ブロックの例に示すように、XPath を介してイベント名でクエリを実行できます。

イベント名による ETW フィルター処理。

<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 を介してイベント名でクエリを実行できます。

イベント名による EventLog フィルター処理。

<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 プロバイダーと情報の元のログ レベルを持つアプリケーション ログからのすべてのログを表示します。 したがって、情報ログを、デバッグおよび追跡ログから分離できます。