Skip to end of metadata
Go to start of metadata

       URule从2.1.1版本开始支持调试信息输出,以帮助我们的规则开发人员进行规则调试。从2.1.1版本开始,无论是决策集、决策表、决策树、决策流上,我们都可以看到一个名为“允许调试信息输出”的属性,我们需要做的就是添加这个属性同时设置属性值为“是”即可,如下图所示:

       打开该属性后,我们的规则在运行时就会向控制台输出条件匹配信息、规则匹配信息、规则执行信息、规则流执行信息等,利用这些信息可以帮助我们快速开发复杂的业务规则。

       从2.1.1版本开始,URule提供了一个名为urule.debug的属性,该属性值默认为true,这时所有调试信息默认都会直接在控制台上打印,当将产品部署到生产环境中时,我们需要将urule.debug属性设置为false,这样所有调试信息都不会再输出,这其中也包括URule规则集里提供的名为“打印内容到控制台”的动作,如下图所示:

调试信息输出目的地配置

       对于调试信息输出,默认是直接输出到控制台,在某些情况下,为了方便查看,我们可能需要将这些调试信息输出到一个具体的文件,对于这一点,URule也提供了相应的支持。如果需要将调试信息输出到文件,我们需要将属性urule.debugToFile的值设置为true,该属性值默认为false,这样在urule.debug为true时只会输出到控制台;当urule.debugToFile属性设置为true时,URule会尝试将调试信息提供给所有实现了com.bstek.urule.debug.DebugWriter接口的实现类(不再将调试信息输出到控制台),由这个实现类来决定具体该输出到何处。

调试信息写入文件注意事项

当urule.debugToFile属性设置为true时,表示会将调试信息写入到实现了DebugWriter接口的实现类,这时,我们在规则调用时需要在session.fireRules()或session.startProcess(...)方法后加上session.writeLogFile()方法,该方法的作用就是尝试执行将调试信息写入到DebugWriter接口的实现类,如果不调用session.writeLogFile()方法,将不会执行调试信息写入到DebugWriter接口的实现类操作。

        以下为DebugWriter实现类源码(实现类需要配置到spring中成为一个标准bean,这样引擎才能发现并使用它)

DebugWriter类源码

       在URule的core模块中,提供了一个输出到具体文件的DebugWriter接口的实现类,要启用这个实现类,我们只需要配置好urule.defaultHtmlFileDebugPath属性,该属性用于定义输出调试信息文件的目录,一旦定义了这个目录,那么会在这个目录下生成一个名为urule-debug.html的HTML文件,这样用浏览器打开就可以查看具体的调试信息了。

       如果我们的规则是在一个包含urule-console模块的项目中运行(比如仿真测试),那么在urule.debugToFile属性设置为true后,会发现运行规则后会在控制台打印“Console key : X”类似信息,这是因为在urule-console模块也提供了一个DebugWriter接口实现类,只是这个实现类可以将调试输出信息输出到一个URL,通过访问这个URL就可以看到指定key的控制台输出信息,查看调试信息的URL格式如下:

       http://servername/urule/console?key=[key值]

       在上面的URL中,key值就是控制台打印“Console key : X”中的"X"值,这个值是一个数字,每次执行都会进行累加,所以如果看不到控制台输出信息,只需要每次执行完规则后累加这个数字就可以通过上述URL查看输出的调试信息(通过访问console这个URL查看调试信息的有效期为3分钟,也就是规则执行完3分钟内可以查看,3分钟后会自动清除,以防止内存占用)。

       最后,再次强调,如果要将项目部署到生产环境,一定要将urule.debug属性设置为false,否则因为有调试信息产生会影响系统性能,urule.debug属性设置为false后,所有的调试信息都将不再输出,包括“打印内容到控制台”的内置动作也不再执行

Labels
  • No labels