我使用的是drools 7.44,并且有一个包含20多条规则的包。目前,我面临的问题是,有时我希望发布的某些规则没有发布。在然后中,我可以添加日志语句,但在时不能添加。有没有一种方法可以调试或记录规则的哪个条件失败?
如果客户年龄=21,性别=男性,则使用以下规则。我如何在运行时确定性别是导致规则不触发的标准。
rule "some rule"
when
$c : Customer(age>18 , gender == "female" )
then
........
do something here
log.debug("something to log")
end
这是一个简单的例子来说明这个问题。理想情况下,我们有多种条件。
使用DebugAgendaEventListener
跟踪规则评估。参见手册
这只适用于匹配成功的情况。否则,将不进行任何评估。有一个JIRA来跟踪这种失败的评估
摘录自手动
Drools引擎还支持以下议程和工作用于调试日志记录的内存事件侦听器:
DebugAgendaEventListener
DebugRuleRuntimeEventListener
这些事件侦听器实现相同的受支持事件侦听器方法,默认情况下包括调试打印语句。您可以添加要监控和记录的特定支持事件,或监控所有议程或工作记忆活动。
例如,以下代码使用DebugRuleRuntimeEventListener用于监视和打印所有工作内存事件的事件侦听器:
监控和打印所有工作内存事件的示例代码
ksession.addEventListener( new DebugRuleRuntimeEventListener() );