7.5. 使用 Log4J 记录 OptaPlanner solver 活动

如果您已使用 Log4J,且您不想切换到更快速的成功者,则您可以为 Log4J 配置 OptaPlanner 项目。

先决条件

  • 您有一个 OptaPlanner 项目
  • 您可以使用 Log4J 日志记录框架

流程

  1. 将网桥依赖项添加到项目 pom.xml 文件中:

        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.x</version>
        </dependency>
  2. log4j.xml 文件中的软件包 org.optaplanner 上配置日志级别,如下例所示,其中 < LEVEL&gt; 是 第 7.4 节 “使用 Logback 记录 OptaPlanner solver 活动” 中列出的日志级别。

    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    
      <category name="org.optaplanner">
        <priority value="<LEVEL>" />
      </category>
    
      ...
    
    </log4j:configuration>
  3. 可选:如果您有一个多租户应用程序,其中多个 Solver 实例可能会同时运行,请将每个实例的日志记录分开到单独的文件中:

    1. 映射的诊断上下文 (MDC)周围的 solve () 调用:

              MDC.put("tenant.name",tenantName);
              MySolution bestSolution = solver.solve(problem);
              MDC.remove("tenant.name");
    2. 将您的日志记录器配置为为每个 ${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>
      注意

      当运行多个 solvers 或一个多线程解决时,大多数附加程序(包括控制台)会导致 debugtrace 日志记录。切换到 async 附加器以避免出现这个问题或关闭 调试日志记录