メッセージログポリシー

ポリシー名

メッセージログ

概要

受信した要求からの情報、バックエンドからの応答、または同じ API エンドポイントに適用されている他のポリシーからの情報を使用してカスタムメッセージを記録する

カテゴリ

トラブルシューティング

使用可能な最小 Mule バージョン

v3.8.0

返される状況コード

このポリシーの戻りコードは存在しません

概要

メッセージログポリシーは、受信した要求からの情報、バックエンドからの応答、または同じ API エンドポイントに適用されている他のポリシーからの情報を使用してカスタムメッセージを記録します。

Mule ゲートウェイの場合、このポリシーは Apache log4j と Apache log4j2 のどちらでも機能します。

前提条件

Anypoint Platform 組織のシステム管理者ロールか、API を作成または管理するための権限が必要です。

ポリシーのパラメーターの設定

Mule ゲートウェイ

UI を使用してメッセージログポリシーを API に適用する場合は、以下のパラメーターを設定できます。

メッセージログポリシー UI
パラメーター 説明 必須?

Message (メッセージ)

ログに記録するメッセージを抽出する DataWeave 式。 Mule 4 ゲートウェイに関する注意: ペイロードがメッセージログの一部として使用される場合は、リスナーを反復不可能に設定しないでください。

必須

Conditional (条件付き)

メッセージをログに記録するかどうかを指定する DataWeave ブール式。

省略可能

Category (カテゴリ)

ログが実行されたパッケージとクラスを示すログメッセージのプレフィックス。

省略可能

Level (レベル)

記録するメッセージのレベル (INFO (情報)、WARN (警告)、ERROR (エラー)、DEBUG (デバッグ)) を定義します。

必須

Before Calling API (API のコール前)

このポリシーが適用される順序を考慮して、API エンドポイントがコールされる前にメッセージを記録するようにログポリシーを設定します。

省略可能

After Calling API (API のコール後)

このポリシーが適用される順序を考慮して、API エンドポイントがコールされた後にメッセージを記録するようにログポリシーを設定します。

省略可能

UI から設定するメッセージログポリシーの例

メッセージログポリシーの使用方法をよく理解できるように、Les Vetments という架空の洋品小売業者を考えてみましょう。E コマースポータルを正常に運営するため、Les Vetments は Web サイト上で実行された要求の状況コードを監査する必要があります。

たとえば、顧客が商品を購入または返品したり、会社がカタログの商品を追加または削除したりした場合には、トランザクションを記録する必要があります。Les Vetments の IT マネージャーは、会社の API にメッセージログポリシーを適用して、コードを変更することなくあらゆるデータやトランザクションの変更を記録して表示できるようにします。

受信および送信 HTTP メッセージの属性を記録するため、Les Vetments では、次の UI 設定でメッセージログポリシーを API に適用します。

  • Message (メッセージ)​: #[属性]

    ペイロード中の属性を記録する必要があります。

  • Conditional (条件)​: 空白

    Les Vetments ではすべての属性を必要とするため、メッセージを絞り込むための Mule 式は指定しません。

  • Category (カテゴリ)​: 空白

    ログ文ではプレフィックスは不要です。

  • Level (レベル)​: Info (情報)

    すべての種別のメッセージを記録します。Info (情報) ログレベルには、Warn (警告)、Error (エラー)、Debug (デバッグ) ログメッセージも含まれます。

  • Before Calling API (API のコール前)​: オン

    API のコール前に発生したすべてのトランザクションが記録されます。

  • After Calling API (API のコール後)​: オン

    API のコール後に発生したすべてのトランザクションが記録されます。

この設定後は、顧客が Les Vetments のカタログにアクセスしたり、カートの商品を追加または削除したり、Les Vetments のカタログの商品が追加または削除されたりするたびに、ログが生成されます。

**********************************************************************
* Policy: message-logging-1351146-proxy                              *
* OS encoding: UTF-8, Mule encoding: UTF-8                           *
*                                                                    *
**********************************************************************
21:56:50.147     11/30/2020     Worker-0     [MuleRuntime].uber.06: [message-logging-771181-proxy].771181-message-logging.CPU_LITE @71625864     INFO
event:184152a0-3370-11eb-b732-0a8c1820c088 org.mule.extension.http.api.HttpRequestAttributes
{
   Request path=/proxy/1
   Raw request path=/proxy/1
   Method=GET
   Listener path=/proxy/*
   Local Address=/172.25.159.101:8081
   Query String=
   Relative Path=/proxy/1
   Masked Request Path=/1
   Remote Address=/18.191.37.179:21836
   Request Uri=/proxy/1
   Raw request Uri=/proxy/1
   Scheme=http
   Version=HTTP/1.1
   Headers=[
      host=logging-policy.us-e2.cloudhub.io
      x-real-ip=204.14.236.154
      accept=*/*
      user-agent=curl/7.54.0
      x-forwarded-for=204.14.236.154
      x-forwarded-port=80
      x-forwarded-proto=http
      x-sigsci-agentresponse=200
      x-sigsci-mac=7caf3820a5c07d06ef827f1565678167
   ]
   Query Parameters=[]
   URI Parameters=[]
}
21:56:50.254     11/30/2020     Worker-0     [MuleRuntime].uber.07: [logging-policy].proxy.CPU_LITE @f0ce617     INFO
event:184152a0-3370-11eb-b732-0a8c1820c088 org.mule.extension.http.api.HttpResponseAttributes
{
   Status Code=200
   Reason Phrase=OK
   Headers=[
      date=Tue, 01 Dec 2020 00:56:50 GMT
      content-type=application/json; charset=utf-8
      set-cookie=__cfduid=d8afa23a4627ebef39cbc54fea223cb231606784210; expires=Thu, 31-Dec-20 00:56:50 GMT; path=/; domain=.typicode.com; HttpOnly; SameSite=Lax
      x-powered-by=Express
      x-ratelimit-limit=1000
      x-ratelimit-remaining=999
      x-ratelimit-reset=1606784265
      vary=Origin, Accept-Encoding
      access-control-allow-credentials=true
      cache-control=max-age=43200
      pragma=no-cache
      expires=-1
      x-content-type-options=nosniff
      etag=W/"53-hfEnumeNh6YirfjyjaujcOPPT+s"
      via=1.1 vegur
      cf-cache-status=MISS
      accept-ranges=bytes
      cf-request-id=06bd666d0a0000386b7a1fc000000001
      expect-ct=max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
      report-to={"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report?s=qUAIXoQ7qqqvFzjcwGrmK2r2PcSfDZ75jFJd0Gi0BLBUMHAcnC9wJ9I%2FEHJtk%2Bra%2FXWqkA%2F5%2FlzoWoC6YS2Lew%2BqKgjhaphHqx5WrZ0CKHMalhcM9it%2Fks0qzQGwbsRzQg%3D%3D"}],"group":"cf-nel","max_age":604800}
      nel={"report_to":"cf-nel","max_age":604800}
      cf-ray=5fa8d9c1a8c6386b-IAD
   ]
}
12:18:31.770     11/18/2020     Worker-0     agw-policy-set-deployment.01     INFO
Applied policy message-logging-1351146 version 1.0.0 to API testLoggingNew-v1-v1:16481163 (16481163) in application messagelog

ヘッダーを記録するため、Les Vetments では ​[Message (メッセージ)]​ 項目で次のコードスニペットを使用します。

#[attributes.headers]

イベントや実行したアクションに基づいてログメッセージをカスタマイズするため、Les Vetments では ​[Message (メッセージ)]​ 項目で次のコードスニペットを使用します。

#['User ' authentication.clientId ' performed action ' attributes.method ' on ' attributes.requestPath ' with Payload: ' ++ payload]

Mule 4 の XML で設定するメッセージログポリシーの例

次のフローはログポリシーの例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:http-policy="http://www.mulesoft.org/schema/mule/http-policy"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
      http://www.mulesoft.org/schema/mule/core/current/mule.xsd
      http://www.mulesoft.org/schema/mule/http-policy
      http://www.mulesoft.org/schema/mule/http-policy/current/mule-http-policy.xsd">

<http-policy:proxy name="102280-message-logging">
  <http-policy:source>
   <try>
	<try>
	  <logger level="INFO" message="#[payload]"
	  category="org.mule.runtime.logging.policy-102280"/>
	    <error-handler>
	     <on-error-continue>
		<logger level="DEBUG" message="Before calling API turned into an error"
			category="org.mule.runtime.logging.policy-102280"/>
	     </on-error-continue>
	    </error-handler>
	</try>
        <http-policy:execute-next/>
          <error-handler>
	    <on-error-propagate logException="false">
	    </on-error-propagate>
          </error-handler>
  </try>
  </http-policy:source>
</http-policy:proxy>
</mule>

ポリシーのしくみ

ポリシーのログ記録は次の順序で実行されます。

  1. 要求が API に送信されます。

  2. 次の条件を満たす場合は、メッセージがログに記録されます。

    • ポリシーに定義されているログのレベルとカテゴリが、設定ファイルに定義されたロガーに含まれている。

    • ポリシーの [Conditional (条件付き)] 項目が設定されていないか、または設定されている条件が満たされた。

  3. API 応答が返されます。メッセージログポリシーは、ポリシーやフローの実行に干渉しません。

  4. メッセージがアプリケーションログに表示されます。

ログ形式について

メッセージログの形式は次のとおりです。

  • Flex: <date> [flex-gateway-envoy][<level>] wasm log <policy-name>.default.<api-name>.default.svc main: [req: <request uuid>] [accessLog] <message>

policy-name​: ポリシーバインドの名前を表示します。

api-name​: API インスタンスの名前を表示します。

request uuid​: メッセージをトリガーした要求の一意の識別子を表示します。

  • Mule: <date> <thread name> <level> <category>: <message>

date​ は、メッセージログの日付とタイムスタンプです。

thread name​ は、メッセージが表示されるイベントスレッドの名前です。

level​ は、INFO (情報)、WARN (警告)、ERROR (エラー)、DEBUG (デバッグ) などのログレベルまたはメッセージタイプです。

category​ は、通常はログが発生したパッケージとクラスを示します。デフォルト値は ​org.mule.runtime.logging.policy-<policy id>​ です。

message​: 記録するメッセージを表示します (例: the payload​)。

2018-01-25 18:57:29,907 [WrapperListener_start_runner] INFO org.mule: the payload

2022-05-04T14:50:43.035570800Z [flex-gateway-envoy][debug] wasm log ingress-http-auth.default.ingress-http.default.svc main: [req: 61c7fdcb-8d22-4cb1-852b-0d5073f23950] [accessLog] the payload

イベント中の状態の記録

メッセージのログは、要求フロー中に特定の間隔で発生します。

  • API フローをログに記録する前:

    API フローをログに記録する前の状態
  • API フローをログに記録した後:

    API フローをログに記録した後の状態
  • API フローの後のエラーハンドラー:

    エラーハンドラー実行後の状態