7.5. Log4J を使用して OptaPlanner ソルバーアクティビティーをログに記録する
すでに Log4J を使用していて、より高速な後継である Logback に切り替えたくない場合は、Log4J 用に OptaPlanner プロジェクトを設定できます。
前提条件
- OptaPlanner プロジェクトがあります
- Log4J ロギングフレームワークを使用しています
手順
ブリッジの依存関係をプロジェクトの
pom.xml
ファイルに追加します。<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.x</version> </dependency>
次の例に示すように、
log4j.xml
ファイルのパッケージorg.optaplanner
でログレベルを設定します。ここで、<LEVEL>
は 「Logback を使用して OptaPlanner ソルバーアクティビティーをログに記録する」 にリストされているログレベルです。<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <category name="org.optaplanner"> <priority value="<LEVEL>" /> </category> ... </log4j:configuration>
オプション: 複数の
ソルバー
インスタンスが同時に実行されている可能性があるマルチテナントアプリケーションがある場合は、各インスタンスのログを別々のファイルに分割します。solve()
呼び出しをマップされた診断コンテキスト (MDC) で囲みます。MDC.put("tenant.name",tenantName); MySolution bestSolution = solver.solve(problem); MDC.remove("tenant.name");
${tenant.name}
ごとに異なるファイルを使用するようにロガーを設定します。たとえば、logback.xml
ファイルでSiftingAppender
を使用します。<appender name="fileAppender" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator> <key>tenant.name</key> <defaultValue>unknown</defaultValue> </discriminator> <sift> <appender name="fileAppender.${tenant.name}" class="...FileAppender"> <file>local/log/optaplanner-${tenant.name}.log</file> ... </appender> </sift> </appender>
注記複数のソルバーまたは 1 つのマルチスレッドソルバーを実行する場合、コンソールを含むほとんどのアペンダーは、
デバッグ
およびトレース
ログで輻輳を引き起こします。この問題を回避するには、非同期アペンダーに切り替えるか、デバッグ
ログをオフにします。