8.5. 使用 Log4J 记录 OptaPlanner solver 活动
如果您已在使用 Log4J,且您不想切换到更快的成功者 Logback,您可以为 Log4J 配置 OptaPlanner 项目。
先决条件
- 您有一个 OptaPlanner 项目
- 您使用 Log4J 日志记录框架
流程
将网桥依赖项添加到项目
pom.xml
文件中:<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.x</version> </dependency>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.x</version> </dependency>
Copy to Clipboard Copied! 在
log4j.xml
文件中配置软件包org.optaplanner
的日志记录级别,如下例所示,其中 <LEVEL>
; 是 第 8.4 节 “使用 Logback 记录 OptaPlanner solver 活动” 中列出的日志级别。<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <category name="org.optaplanner"> <priority value="<LEVEL>" /> </category> ... </log4j:configuration>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <category name="org.optaplanner"> <priority value="<LEVEL>" /> </category> ... </log4j:configuration>
Copy to Clipboard Copied! 可选:如果您有一个多租户应用程序,其中可能同时运行多个
Solver
实例,请将每个实例的日志记录分成单独的文件:使用 Mapped Diagnostic Context (MDC)括起
solve ()
调用:MDC.put("tenant.name",tenantName); MySolution bestSolution = solver.solve(problem); MDC.remove("tenant.name");
MDC.put("tenant.name",tenantName); MySolution bestSolution = solver.solve(problem); MDC.remove("tenant.name");
Copy to Clipboard Copied! 将您的日志记录器配置为为每个
${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>
<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>
Copy to Clipboard Copied! 注意当运行多个解析程序或一个多线程解决时,大多数附加程序(包括控制台)会导致
debug
和trace
日志记录的拥塞。切换到 async 附加程序以避免出现这个问题或关闭调试日志记录
。