是否可以使用调试事件侦听器将 Drools 的默认 stderr 输出更改为 stdout 中的 INFO?

Can Drools' default stderr output be changed to INFO in stdout with debug event listeners?

我已将 AgendaRuleRuntime 事件侦听器添加到我的无状态 KIE 会话中,但所有输出都显示为 ERROR [stderr] ...;是否可以将 session/listeners 配置为使用 stdout 并控制日志级别(最好是 INFO)?

我看到了一个几乎相同的 Google Groups KIE 执行服务器问题,但我将 drools 引擎嵌入到 Thorntail 应用程序中。

我正在使用 org.kie.kie-apiorg.kie.kie-cieorg.drools.drools-core 的无状态 KIE 会话和 7.23.0.Final 版本。我的无状态会话创建的摘录是:

KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
StatelessKieSession statelessKieSession = kieContainer.newStatelessKieSession();
statelessKieSession.addEventListener(new DebugAgendaEventListener());
statelessKieSession.addEventListener(new DebugRuleRuntimeEventListener());

我注意到 DebugAgendaEventListener and DebugRuleRuntimeEventListener can accept a PrintStream 参数上的构造函数之一,我可以用它来替换默认的 stderr 吗?

记录到控制台的示例输出是:

ERROR [stderr] (default task-1) ==>[ActivationCreatedEvent: getActivation()=[[ ...]]]
ERROR [stderr] (default task-1) ==>[BeforeActivationFiredEvent:  getActivation()=[[...]]]
... Rule fired ...
ERROR [stderr] (default task-1) ==>[AfterActivationFiredEvent: getActivation()=[[ ... ]]]

我不明白为什么这些默认记录到 stderr,它们出现更多 DEBUG/TRACE 级别的信息所以希望将它们输出到 stdout 如果可能的话。

kie-api 中的 Debug*Listener(s) 默认情况下会发出标准错误以工作,而不管任何日志记录配置。您确实可以通过使用该构造函数传递自定义 PrintStream 来覆盖打印消息的位置。

is it possible to configure the session/listeners to use stdout and control log levels (preferably INFO)?

您可以使用来自 drools-core 依赖项的包 org.drools.core.event 中的 Debug*Listener(s),它通过 SLF4j 默认情况下已经按照您描述的方式工作,即发出默认 info 级。如果您已将日志记录配置为发送到标准输出,作为默认做法,它将开箱即用。

这些只是一些 "utility" 默认实现;或者,您可以实现自己的侦听器以在您最喜欢的情况下工作。