ログ

Mule Runtime Engine (Mule) 4 は、Log4j 2 非同期ログをデフォルトで使用するため、メッセージ処理とは別のスレッドでログ操作が実行され、ログ操作が完了するのを待たずにメッセージ処理を続行できます。

非同期ログでは、 「Asynchronous Logging in Mule 3.6 (Mule 3.6 の非同期ログ)」​で説明されているようにパフォーマンスと信頼性のトレードオフが発生し、ログバッファがディスクにフラッシュされる前に Mule がクラッシュした場合は一部のメッセージが失われることがあります。この場合は、非同期ロガーと同期ロガーの混在構成を検討してください。 ベストプラクティスは、本番アプリケーションでは ​WARN​ のログレベルを最小限に抑えて、同期ログに非同期ログを優先させて使用することです。ポリシーのインストール成功などのイベントを確認する場合や、トラブルシューティングを実施する場合などには、​INFO​ ログレベルを有効化します。

ログ戦略を設定するには、アプリケーションの ​src/main/resources/log4j2.xml​ ファイルを次の例のように編集します。

<?xml version="1.0" encoding="utf-8"?>
<Configuration>
   <Appenders>
       <RollingFile name="file" fileName="${sys:mule.home}${sys:file.separator}logs${sys:file.separator}try-transactional-propagate.log"
                filePattern="${sys:mule.home}${sys:file.separator}logs${sys:file.separator}try-transactional-propagate-%i.log">
           <PatternLayout pattern="%-5p %d [%t] [event: %X{correlationId}] %c: %m%n" />
           <SizeBasedTriggeringPolicy size="10 MB" />
           <DefaultRolloverStrategy max="10"/>
       </RollingFile>
   </Appenders>
   <Loggers>

       <!-- Http Logger shows wire traffic on DEBUG. -->
       <!--AsyncLogger name="org.mule.service.http.impl.service.HttpMessageLogger" level="DEBUG" /-->
       <AsyncLogger name="org.mule.service.http" level="WARN"/>
       <AsyncLogger name="org.mule.extension.http" level="WARN"/>

   <!-- Mule logger -->
       <AsyncLogger name="org.mule.runtime.core.internal.processor.LoggerMessageProcessor" level="WARN"/>
       <AsyncRoot level="WARN">
           <AppenderRef ref="file" />
       </AsyncRoot>
   </Loggers>
</Configuration>
  • メッセージ、特にペイロードの一部をログに記録する場合は、ストリーミングがバイパスされ、大きなペイロードでは大量の ディスク I/O が発生するため、注意が必要です。

  • <async>​ スコープを使用したメッセージのログは避けてください。

    ログメカニズムはすでに Log4j2 ライブラリによってバックエンドで非同期に実装されているため、​<async>​ スコープにロガーを含めても並列処理は改善せず、リソースの使用量が増えて、必要なスレッド数が重複するだけです。アプリケーションでこのパターンを使用すると、スレッドの枯渇、パフォーマンスの低下、バックプレッシャーの原因となることがあります。

    		<async doc:name="Async" doc:description="Don't do this">
    			<logger level="INFO" doc:name="Logger" message="Don't do this" />
    		</async>
    
    		<logger level="INFO" doc:name="Logger" message="Do this"/>