可以使用调试事件侦听器在标准输出中将Drools的默认stderr输出更改为INFO吗?

时间:2019-06-21 16:41:07

标签: drools kie

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

我已经看到有关KIE Execution Server几乎相同的Google Groups问题,但我正在将Drools引擎嵌入Thorntail应用程序中。

我正在使用无状态KIE会话以及7.23.0.Finalorg.kie.kie-apiorg.kie.kie-cie的{​​{1}}版本。创建我的无状态会话的摘录是:

org.drools.drools-core

我注意到DebugAgendaEventListenerDebugRuleRuntimeEventListener上的构造函数之一可以接受PrintStream参数,我可以用它代替默认的KieServices kieServices = KieServices.Factory.get(); KieContainer kieContainer = kieServices.getKieClasspathContainer(); StatelessKieSession statelessKieSession = kieContainer.newStatelessKieSession(); statelessKieSession.addEventListener(new DebugAgendaEventListener()); statelessKieSession.addEventListener(new DebugRuleRuntimeEventListener()); 吗?

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

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如果可能的话。

1 个答案:

答案 0 :(得分:1)

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

  

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

您可以使用Debug*Listener依赖项的软件包org.drools.core.event中的drools-core(s),通过SLF4j,它已经默认以您描述的方式工作,并以{{默认情况下为1}}级。前提是您已默认将日志记录配置为发出标准输出,它将以开箱即用的方式工作。

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