1

要求

OptaPlanner日志具有保留缩进的可读性:

10:34:46,442 INFO  Solving started: time spent (11), best score (-72init/0hard/0medium/0soft), environment mode (REPRODUCIBLE), random (JDK with seed 0).
10:34:46,467 DEBUG     CH step (0), time spent (36), score (-71init/0hard/-1000medium/0soft), selected move count (7), picked move (Day-0(0) {null -> Micha}).
10:34:46,474 DEBUG     CH step (1), time spent (43), score (-70init/0hard/-1414medium/-1000soft), selected move count (7), picked move (Day-0(1) {null -> Angelika}).
                       ... // 70 lines
10:34:46,608 DEBUG     CH step (71), time spent (177), score (0hard/-27239medium/-23706soft), selected move count (7), picked move (Day-17(3) {null -> Katrin}).
10:34:46,610 INFO  Construction Heuristic phase (0) ended: time spent (179), best score (0hard/-27239medium/-23706soft), score calculation speed (3023/sec), step total (72).
10:34:46,624 DEBUG     LS step (0), time spent (193), score (0hard/-27239medium/-23706soft),     best score (0hard/-27239medium/-23706soft), accepted/selected move count (1/25), picked move (Day-9(1) {Irene} <-> Day-15(1) {Susi}).
10:34:46,628 DEBUG     LS step (1), time spent (197), score (0hard/-27239medium/-23706soft),     best score (0hard/-27239medium/-23706soft), accepted/selected move count (1/17), picked move (Day-6(1) {Irene} <-> Day-6(2) {Kristina}).
                       ... // 643 lines
10:34:47,486 DEBUG     LS step (644), time spent (1055), score (-1hard/-27239medium/-23748soft),     best score (0hard/-27239medium/-23706soft), accepted/selected move count (0/1), picked move (Day-7(0) {Tobias} <-> Day-1(1) {Angelika}).
10:34:47,486 INFO  Local Search phase (1) ended: time spent (1055), best score (0hard/-27239medium/-23706soft), score calculation speed (14085/sec), step total (645).
10:34:47,487 INFO  Solving ended: time spent (1056), best score (0hard/-27239medium/-23706soft), score calculation speed (12124/sec), phase total (2), environment mode (REPRODUCIBLE).

上面的缩进显示了外循环的开始和结束。使用上面示例中的缩进,很难识别每个阶段何时结束,等等。这对于日志记录来说更糟TRACE,这也表明内部循环的缩进更深。

因此我的logback.xml模式使用<pattern>%d [%t] %-5p %m%n</pattern>.

问题

WildFly(和其他应用程序服务器)忽略我的logback依赖项和我的logback.xml文件,并强制我使用包含类名的日志记录模式,这会破坏我的缩进:

10:50:51,317 INFO  [org.optaplanner.core.impl.solver.DefaultSolver] (EE-ManagedExecutorService-default-Thread-1) Solving started: time spent (60), best score (-62init/0hard/0soft), environment mode (REPRODUCIBLE), random (JDK with seed 0).
10:50:51,368 INFO  [org.optaplanner.openshift.employeerostering.server.solver.WannabeSolverManager] (EE-ManagedExecutorService-default-Thread-1)   New best solution found for rosterId (-1).
10:50:51,368 INFO  [org.optaplanner.core.impl.constructionheuristic.DefaultConstructionHeuristicPhase] (EE-ManagedExecutorService-default-Thread-1) Construction Heuristic phase (0) ended: time spent (112), best score (0hard/0soft), score calculation speed (42568/sec), step total (62).
10:50:58,986 INFO  [org.optaplanner.core.impl.localsearch.DefaultLocalSearchPhase] (EE-ManagedExecutorService-default-Thread-1) Local Search phase (1) ended: time spent (7730), best score (0hard/0soft), score calculation speed (331097/sec), step total (2520642).
10:50:58,986 INFO  [org.optaplanner.core.impl.solver.DefaultSolver] (EE-ManagedExecutorService-default-Thread-1) Solving ended: time spent (7730), best score (0hard/0soft), score calculation speed (326366/sec), phase total (2), environment mode (REPRODUCIBLE).

我看不懂,对我来说太冗长了。最后一行有 113 个字符的开销,然后我才能阅读唯一真正重要的内容“解决结束”。向右滚动以查看它。

如何更改war我的应用程序文件中的日志记录模式?我正在使用 OpenShift(它为我提供了一个 WildFly 实例),所以我不能乱搞 Wildfly 配置本身。


错误的解决方案

添加jboss-deployment-structure.xml到排除<subsystem name="logging" />没有帮助,因为然后我得到这个丑陋的输出,每行两次提到我的整个时间戳和线程名称:

10:46:19,236 INFO  [stdout] (EE-ManagedExecutorService-default-Thread-1) 2017-05-22 10:46:19,236 [EE-ManagedExecutorService-default-Thread-1] DEBUG     LS step (95814), time spent (4026), score (0hard/0soft),     best score (0hard/0soft), accepted/selected move count (1/1), picked move (Fort Collins 2017-02-01T06:00-14:00 {Jay Cole} <-> Saint Peter 2017-02-01T06:00-14:00 {Ivy Cole}).
10:46:19,236 INFO  [stdout] (EE-ManagedExecutorService-default-Thread-1) 2017-05-22 10:46:19,236 [EE-ManagedExecutorService-default-Thread-1] DEBUG     LS step (95815), time spent (4026), score (0hard/0soft),     best score (0hard/0soft), accepted/selected move count (1/1), picked move (Saint Peter 2017-02-01T06:00-14:00 {Jay Cole} <-> Santa Barbara 2017-02-01T14:00-22:00 {Flo Li}).
10:46:19,236 INFO  [stdout] (EE-ManagedExecutorService-default-Thread-1) 2017-05-22 10:46:19,236 [EE-ManagedExecutorService-default-Thread-1] DEBUG     LS step (95816), time spent (4026), score (0hard/0soft),     best score (0hard/0soft), accepted/selected move count (1/1), picked move (Los Angeles 2017-02-02T06:00-14:00 {Ivy Cole -> Elsa King}).
4

2 回答 2

1

使用 WildFly,您可以在目录logging.properties中的 WAR 中包含一个文件WAR/WEB-INF/classes。不幸的是,属性文件的格式没有很好的记录。有一些非官方的文档。然而,下面是一个例子。

loggers=

logger.level=INFO
logger.handlers=CONSOLE

handler.CONSOLE=org.jboss.logmanager.handlers.ConsoleHandler
handler.CONSOLE.level=INFO
handler.CONSOLE.formatter=PATTERN
handler.CONSOLE.properties=autoFlush,target,enabled
handler.CONSOLE.autoFlush=true
handler.CONSOLE.target=SYSTEM_OUT
handler.CONSOLE.enabled=true

formatter.PATTERN=org.jboss.logmanager.formatters.PatternFormatter
formatter.PATTERN.properties=pattern
formatter.PATTERN.pattern=%d{HH:mm:ss,SSS} [%t] %-5p %m%n

请注意,这[%t]是线程名称的模式,它可能会稍微偏离您正在寻找的格式。

于 2017-05-23T18:12:27.690 回答
1

您可以使用日志子系统的 JBoss 配置轻松调整服务器日志输出。这种方法的优点之一是您可以在运行时更改/更新它,而无需重新部署您的应用程序或重新启动服务器,并且您可以从一个地方管理所有日志记录配置。
您没有指定是否要全局更改输出,或者您是否有一个特定的日志文件来存储您的 optaplanner 日志。我建议使用您请求的格式创建一个专用日志,同时仍保留默认日志(带有类名),以防您需要它进行一些故障排除或一些自动日志处理。如果您的要求不同,您可以轻松调整此设置。为了我们的目的,我们需要设置一个自定义handlercategory. 类别通常对应于类或包,处理程序定义如何处理日志消息(例如到文件,到控制台,...)。
首先,让我们创建一个处理程序,它从消息条目中省略类名。通过 JBoss CLI,我们可以使用以下命令:

/subsystem=logging/periodic-rotating-file-handler=OPTAPLANNER:add(append=true,formatter= "%d{HH:mm:ss,SSS} %-5p (%t) %s%e%n", suffix=".yyyy-MM-dd",file={path="opta.log",relative-to="jboss.server.llog.dir"},level=ALL)

此处理程序会将所有消息输出到opta.log服务器日志目录中的文件。该文件将在每天午夜滚动,并且当前日期将作为后缀附加。我们指定的格式化程序完全省略了类名,您可以根据需要轻松自定义它。

现在我们为包中的类创建一个处理org.optaplanner程序:通过 JBoss CLI,您可以定义一个自定义类别,如下所示:

/subsystem=logging/logger=org.optaplanner:add(category=org.optaplanner,level=INFO,handlers=[OPTAPLANNER])

使用此配置,来自的所有日志消息org.optaplanner.*都应重定向到专用OPTAPLANNER处理程序以及两个默认处理程序(FILECONSOLE)。

http://server:9990如果您喜欢的话,所有操作都可以通过基于 Web 的 wildfly 管理控制台(可在 上使用)完成。

有关更多信息,请查看wildfly 文档

于 2017-05-28T11:06:16.833 回答