8.4. Logback を使用して OptaPlanner ソルバーアクティビティーをログに記録する
Logback は、OptaPlanner で使用するために推奨されるロギングフレームワークです。Logback を使用して、OptaPlanner ソルバーアクティビティーをログに記録します。
前提条件
- OptaPlanner プロジェクトがあります。
手順
次の Maven 依存関係を OptaPlanner プロジェクトの
pom.xml
ファイルに追加します。注記ブリッジの依存関係を追加する必要はありません。
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.x</version> </dependency>
次の例に示すように、
logback.xml
ファイルのorg.optaplanner
パッケージのログレベルを設定します。ここで、<LEVEL>
は 「Logback を使用して OptaPlanner ソルバーアクティビティーをログに記録する」 にリストされているログレベルです。。<configuration> <logger name="org.optaplanner" level="<LEVEL>"/> ... </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 つのマルチスレッドソルバーを実行する場合、コンソールを含むほとんどのアペンダーは、
デバッグ
およびトレース
ログで輻輳を引き起こします。この問題を回避するには、非同期アペンダーに切り替えるか、デバッグ
ログをオフにします。
-
OptaPlanner が新しいレベルを認識しない場合は、一時的にシステムプロパティー
-Dlogback.LEVEL=true
を追加してトラブルシューティングします。