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を追加してトラブルシューティングします。