drools规则中打印日志

如果在drools规则引擎的规则中通过日志框架打印日志呢?简单的来做可以通过以下代码带印日信息:

System.out.println("123");

那么,如果想通过统一的日志框架来打印该如何做呢?可以使用global来进行操作。

global设置日志并打印

可以通过drools规则引擎的global功能将日志设置如rule的drl文件中,然后再在drl文件中进行使用logger进行打印。具体测试代码如下:

package com.secbro2.drools.logger;

import com.secbro2.drools.demo.BaseDemo;
import org.kie.api.runtime.KieSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author sec
 * @version 1.0
 * @date 2019/11/3 10:39 PM
 **/
public class LoggerDemo extends BaseDemo {

	private static Logger logger = LoggerFactory.getLogger(LoggerDemo.class);

	public static void main(String[] args) {

		KieSession kieSession = getKieSession("loggerTest");
		kieSession.setGlobal("logger", logger);

		kieSession.insert("abc");

		int count = kieSession.fireAllRules();
		logger.info("触发了" + count + "条规则!");

	}
}

drl规则文件中logger的使用如下:

package com.logger

global org.slf4j.Logger logger

rule "loggerTest"

when

    $s:String();

then
    System.out.println("123");
    logger.info("print:" + $s);

 end

其他配置,在com.logger中创建名称为loggerTest.drl,代码如上。在kmodule.xml中配置kbaseksession

<kbase packages="com.logger" name="contains-logger">
    <ksession name="loggerTest"/>
</kbase>
BaseDemo类中的代码如下:
public class BaseDemo {


	protected static KieSession getKieSession(String sessionName) {
		KieServices kieServices = KieServices.Factory.get();
		KieContainer container = kieServices.getKieClasspathContainer();
		return container.newKieSession(sessionName);
	}

}

相关技术视频

QQ技术交流2群:715840230

CSDN学院:《Drools7规则引擎进阶教程》

CSDN学院:《Drools7规则引擎入门教程》

CSDN学院:《Drools7系列优惠套餐》

Drools规则引擎基础+Workbench实战视频教程套餐

drools规则引擎打印日志logger插图


drools规则引擎打印日志logger插图(1)

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2019/11/03/drools-logger/