1

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

我在 KIE Execution Server 上看到了一个几乎相同的Google Groups问题,但我将 drools 引擎嵌入到 Thorntail 应用程序中。

我正在使用无状态KIE 会话和7.23.0.Final, org.kie.kie-api, org.kie.kie-cie. org.drools.drools-core创建我的无状态会话的摘录是:

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

我注意到DebugAgendaEventListenerDebugRuleRuntimeEventListener的构造函数之一可以接受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尽可能将它们输出到。

4

1 回答 1

1

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

是否可以配置会话/侦听器以使用stdout和控制日志级别(最好INFO)?

您可以在依赖项中的包中使用( Debug*Listeners) ,通过 SLF4j,默认情况下已经按照您描述的方式工作,默认情况下在级别发出。假设作为默认做法,您已将日志记录配置为发送到标准输出,那么它将以开箱即用的方式工作。org.drools.core.eventdrools-coreinfo

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

于 2019-06-22T08:51:02.243 回答